目录

pyQT学习笔记Qt常用组件与绘图类的使用指南

pyQT学习笔记——Qt常用组件与绘图类的使用指南

大小策略是Qt中用于控制控件在布局中如何调整大小的机制。它决定了控件在水平和垂直方向上的行为。通过设置大小策略,可以实现控件的自适应布局,使界面更加灵活。

sizePolicy: [Preferred, Preferred, 0, 0]
  • 水平策略Preferred

    控件会根据内容调整大小,但不会强制填充可用空间。如果布局中有额外空间,控件不会扩展;如果空间不足,控件会缩小到最小大小。

  • 垂直策略Preferred

    同水平策略,控件会根据内容调整大小,但不会强制填充可用空间。

  • 水平伸展0

    表示控件在水平方向上不会扩展以填充额外空间。

  • 垂直伸展0

    表示控件在垂直方向上不会扩展以填充额外空间。

  • Fixed :控件大小固定,无法调整。
  • Minimum :控件大小不能小于最小大小,但可以扩展。
  • Maximum :控件大小不能超过最大大小,但可以缩小。
  • Expanding :控件会尽可能扩展以填充可用空间。
  • MinimumExpanding :控件大小不能小于最小大小,但会尽可能扩展。

伸展值用于控制多个控件在布局中分配额外空间的比例。例如,如果两个控件的水平伸展值分别为 12 ,则额外空间会按1:2的比例分配。

QSpinBoxQComboBox 是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!")  # 绘制文本
  • 绘制形状 :矩形、椭圆、多边形等。
  • 设置颜色 :通过 QPenQBrush 设置线条颜色和填充颜色。
  • 变换操作 :支持旋转、平移、缩放等操作。
  • 状态复位 :可以保存和恢复绘制状态。