大小策略是Qt中用于控制控件在布局中如何调整大小的机制。它决定了控件在水平和垂直方向上的行为。通过设置大小策略,可以实现控件的自适应布局,使界面更加灵活。
sizePolicy: [Preferred, Preferred, 0, 0]
水平策略:Preferred
控件会根据内容调整大小,但不会强制填充可用空间。如果布局中有额外空间,控件不会扩展;如果空间不足,控件会缩小到最小大小。
垂直策略:Preferred
同水平策略,控件会根据内容调整大小,但不会强制填充可用空间。
水平伸展:0
表示控件在水平方向上不会扩展以填充额外空间。
垂直伸展:0
表示控件在垂直方向上不会扩展以填充额外空间。
伸展值用于控制多个控件在布局中分配额外空间的比例。例如,如果两个控件的水平伸展值分别为1
和2
,则额外空间会按1:2的比例分配。
QSpinBox
和QComboBox
是Qt中常用的输入组件,分别用于数值输入和下拉选择框。
from PyQt5 import QtWidgets
# 创建一个窗口
self.win = QtWidgets.QWidget()
# 创建一个 QSpinBox
self.win_spin_box = QtWidgets.QSpinBox()
self.win_spin_box.setRange(0, 100) # 设置数值范围
self.win_spin_box.setSingleStep(1) # 设置步长
# 创建一个 QComboBox
self.win_combo_box = QtWidgets.QComboBox()
self.win_combo_box.addItems(["选项1", "选项2", "选项3"]) # 添加选项
QDialog
是Qt中用于创建对话框的类,通常用于弹出提示框或输入框。
from PyQt5.QtWidgets import QMessageBox
# 弹出一个消息框
QMessageBox.information(self.win, "标题", "这是一个消息框")
QTableView
是一个功能强大的表格组件,支持View-Model分离的设计方式。通过绑定自定义的TableModel
,可以实现复杂的数据展示。
from PyQt5.QtWidgets import QTableView
from PyQt5.QtCore import QAbstractTableModel
# 创建一个自定义的TableModel
class MyTableModel(QAbstractTableModel):
def __init__(self, data, header):
super().__init__()
self._data = data
self._header = header
def rowCount(self, parent=None):
return len(self._data)
def columnCount(self, parent=None):
return len(self._header)
def data(self, index, role):
if role == QtCore.Qt.DisplayRole:
return self._data[index.row()][index.column()]
return None
def headerData(self, section, orientation, role):
if role == QtCore.Qt.DisplayRole:
if orientation == QtCore.Qt.Horizontal:
return self._header[section]
return None
# 使用 QTableView 绑定数据
data = [[1, 2, 3], [4, 5, 6]]
header = ["列1", "列2", "列3"]
model = MyTableModel(data, header)
table = QTableView()
table.setModel(model)
QPainter
是Qt中用于图形绘制的类,支持绘制常见的几何形状(如圆、矩形、文本等),并支持颜色、旋转、平移等操作。
所有QWidget
类都继承了paintEvent
方法,绘制代码需要在paintEvent
方法中完成。
from PyQt5.QtWidgets import QWidget
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt
class MyWidget(QWidget):
def paintEvent(self, paintEvent):
painter = QPainter(self) # 创建 QPainter 对象
painter.setPen(QPen(Qt.blue, 2)) # 设置画笔颜色和宽度
painter.drawRect(10, 10, 100, 100) # 绘制矩形
painter.drawEllipse(120, 10, 50, 50) # 绘制椭圆
painter.drawText(10, 150, "Hello, QPainter!") # 绘制文本
QPen
和QBrush
设置线条颜色和填充颜色。