4.3.4旋钮:QDial
Dial控件,又称为旋钮控件,它对应QDial类。它本质上类似于一个滑块控件,只是显示的样式不同。QDial类的常用方法如下:
setFixedSize ():设置旋钮的大小
setRange():设置表盘的数值范围
setMinimum():设置最小值
setMaximum():设置最大值
setNotchesVisible():设置是否显示刻度
【例4.18】QDial旋钮控件测试,测试如下:
import sys # 导入sys模块,用于处理Python运行时环境和命令行参数。
from PyQt6.QtGui import QFont # 从PyQt6.QtGui模块中导入QFont类,用于设置字体。
from PyQt6.QtWidgets import (QApplication, QWidget, QDial, QLabel, QVBoxLayout) # 从PyQt6.QtWidgets模块中导入多个类,用于创建应用程序、窗口、旋钮控件、标签和垂直布局。
from PyQt6.QtCore import Qt # 从PyQt6.QtCore模块中导入Qt类,用于设置控件的属性。
class DemoDial(QWidget): # 定义一个名为DemoDial的类,继承自QWidget。
def __init__(self, parent=None): # 类的构造函数,用于初始化对象,可以有一个父对象参数。
super(DemoDial, self).__init__(parent) # 调用父类QWidget的构造函数,完成基本的初始化。
self.setWindowTitle('QDial旋钮控件测试') # 设置窗口的标题为'QDial旋钮控件测试'。
self.resize(400, 300) # 设置窗口的大小为400像素宽,300像素高。
self.initUi() # 调用initUi方法,用于初始化用户界面。
def initUi(self): # 初始化用户界面的方法。
self.dial = QDial(self) # 创建一个QDial对象(旋钮控件),并指定其父对象为当前窗口。
self.dial.setRange(0, 100) # 设置旋钮控件的范围为0到100。
self.dial.setNotchesVisible(True) # 设置旋钮控件的刻度线可见。
self.dial.valueChanged.connect(self.onDialValueChanged) # 当旋钮控件的值改变时,连接信号到onDialValueChanged方法。
self.lb = QLabel('0', self) # 创建一个QLabel对象(标签),显示文本'0',并指定其父对象为当前窗口。
self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter) # 设置标签中的文本居中对齐。
self.lb.setFont(QFont('Arial Black', 16)) # 设置标签的字体为'Arial Black',大小为16。
vLayout = QVBoxLayout(self) # 创建一个QVBoxLayout对象(垂直布局),并指定其父对象为当前窗口。
vLayout.addWidget(self.dial) # 将旋钮控件添加到垂直布局中。
vLayout.addWidget(self.lb) # 将标签添加到垂直布局中。
self.setLayout(vLayout) # 设置当前窗口的布局为之前创建的垂直布局。
def onDialValueChanged(self): # 定义一个方法,用于处理旋钮控件的值改变事件。
self.lb.setText(str(self.dial.value())) # 将旋钮控件的当前值转换为字符串,并设置为标签的文本。
if __name__ == '__main__': # 判断当前脚本是否作为主程序运行。
app = QApplication(sys.argv) # 创建一个QApplication对象,用于管理应用程序级别的资源。
w = DemoDial() # 创建一个DemoDial对象,即应用程序的主窗口部件。
w.show() # 显示窗口部件。
sys.exit(app.exec()) # 进入应用程序的主事件循环,等待用户交互,直到应用程序关闭。
这段代码主要实现了一个使用 QDial
控件的简单PyQt6应用程序。QDial
是一个旋钮控件,用户可以通过旋转旋钮来选择一个在指定范围内的值。以下是对代码的详细解释:
功能:
- 创建一个窗口,窗口标题为“QDial旋钮控件测试”。
- 在窗口中放置一个
QDial
旋钮控件,并设置其范围从0到100。 - 在旋钮下方放置一个
QLabel
,用于显示旋钮的当前值。 - 当用户旋转旋钮时,
QLabel
上的值会实时更新。
布局和控件:
- 布局:使用了
QVBoxLayout
,这是一个垂直布局,使得QDial
和QLabel
可以垂直排列。 - 控件:
QWidget
:这是主窗口,所有的其他控件都放置在这个窗口上。QDial
:这是旋钮控件,用户可以通过旋转它来选择一个值。QLabel
:这是一个标签,用于显示文本。在这个例子中,它用于显示旋钮的当前值。
关键语句:
self.setWindowTitle('QDial旋钮控件测试')
:设置窗口的标题。self.dial = QDial(self)
:创建一个QDial
控件实例。self.dial.setRange(0, 100)
:设置旋钮的值范围从0到100。self.dial.setNotchesVisible(True)
:使旋钮上的刻度线可见。self.dial.valueChanged.connect(self.onDialValueChanged)
:将旋钮的valueChanged
信号连接到onDialValueChanged
槽函数。这样,每当旋钮的值改变时,onDialValueChanged
函数就会被调用。self.lb = QLabel('0', self)
:创建一个QLabel
控件实例,并初始化为显示“0”。self.lb.setText(str(self.dial.value()))
:在onDialValueChanged
函数中,设置QLabel
的文本为旋钮的当前值。vLayout.addWidget(self.dial)
和vLayout.addWidget(self.lb)
:将QDial
和QLabel
添加到垂直布局中。app.exec()
:这是PyQt6应用程序的主事件循环,它会一直运行,直到应用程序关闭。-
self.initUi()
:在__init__
方法中调用initUi
方法来初始化界面元素和布局。这是创建和配置控件的常用方式,使得__init__
方法更加清晰和简洁。 -
self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)
:设置QLabel
的文本对齐方式为居中对齐。这样,无论旋钮的值是多少,它都会始终在标签中居中显示。 -
self.lb.setFont(QFont('Arial Black', 16))
:为QLabel
设置字体和字号。这里选择了 'Arial Black' 字体,并设置了字号为 16。 -
vLayout = QVBoxLayout(self)
:创建一个垂直布局对象vLayout
,并将其与主窗口self
关联。这意味着布局将管理主窗口中的控件位置和大小。 -
self.setLayout(vLayout)
:将vLayout
设置为窗口的布局管理器。这样,所有添加到vLayout
中的控件都会根据布局的规则来显示。 -
sys.exit(app.exec())
:启动应用程序的事件循环,并等待用户交互。当应用程序关闭时,sys.exit()
确保程序正常退出。app.exec()
返回一个整数值,这个值通常被sys.exit()
使用作为程序退出码。