pyQT学习笔记——Qt常用组件与绘图类的使用指南
Qt常用组件与绘图类的使用指南
- 一、大小策略(Size Policy)
- 1.1 大小策略概述
- 1.2 具体参数
- 1.3 其他常见策略
- 1.4 伸展值的作用
- 二、常用组件的使用
- 2.1 QSpinBox 和 QComboBox
- 示例代码
- 2.2 QDialog
- 示例代码
- 2.3 QTableView
- 示例代码
- 三、QPainter 类介绍
- 3.1 QPainter 的使用
- 示例代码
- 3.2 QPainter 的功能
一、大小策略(Size Policy)
1.1 大小策略概述
大小策略是Qt中用于控制控件在布局中如何调整大小的机制。它决定了控件在水平和垂直方向上的行为。通过设置大小策略,可以实现控件的自适应布局,使界面更加灵活。
1.2 具体参数
sizePolicy: [Preferred, Preferred, 0, 0]
-
水平策略:
Preferred
控件会根据内容调整大小,但不会强制填充可用空间。如果布局中有额外空间,控件不会扩展;如果空间不足,控件会缩小到最小大小。 -
垂直策略:
Preferred
同水平策略,控件会根据内容调整大小,但不会强制填充可用空间。 -
水平伸展:
0
表示控件在水平方向上不会扩展以填充额外空间。 -
垂直伸展:
0
表示控件在垂直方向上不会扩展以填充额外空间。
1.3 其他常见策略
- Fixed:控件大小固定,无法调整。
- Minimum:控件大小不能小于最小大小,但可以扩展。
- Maximum:控件大小不能超过最大大小,但可以缩小。
- Expanding:控件会尽可能扩展以填充可用空间。
- MinimumExpanding:控件大小不能小于最小大小,但会尽可能扩展。
1.4 伸展值的作用
伸展值用于控制多个控件在布局中分配额外空间的比例。例如,如果两个控件的水平伸展值分别为1
和2
,则额外空间会按1:2的比例分配。
二、常用组件的使用
2.1 QSpinBox 和 QComboBox
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"]) # 添加选项
2.2 QDialog
QDialog
是Qt中用于创建对话框的类,通常用于弹出提示框或输入框。
示例代码
from PyQt5.QtWidgets import QMessageBox
# 弹出一个消息框
QMessageBox.information(self.win, "标题", "这是一个消息框")
2.3 QTableView
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 类介绍
QPainter
是Qt中用于图形绘制的类,支持绘制常见的几何形状(如圆、矩形、文本等),并支持颜色、旋转、平移等操作。
3.1 QPainter 的使用
所有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!") # 绘制文本
3.2 QPainter 的功能
- 绘制形状:矩形、椭圆、多边形等。
- 设置颜色:通过
QPen
和QBrush
设置线条颜色和填充颜色。 - 变换操作:支持旋转、平移、缩放等操作。
- 状态复位:可以保存和恢复绘制状态。