4.2.9计数器:QSpinBox和 QDoubleSpinBox
在默认情况下,QSpinBox取值范围是0~99,每次改变的步长值为1。DoubleSpinBox 的默认精度是两位小数,但可以通过 setDecimals()来改变。QSpinBox类中的常用方法如下:
setMinimum():设置计数器的下界
setMaximum():设置计数器的上界
setRange():设置计数器的最大值、最小值和步长值
setValue():设置计数器的当前值
value():获取计数器的当前值
setSingleStep():设置计数器的步长值
singleStep():获取计数器的步长值
【例4.12】QSpinBox计数器测试。如下:
import sys # 导入sys模块,用于获取或操作Python解释器的相关变量和函数。
from PyQt6.QtCore import * # 从PyQt6的QtCore模块中导入所有类和函数,用于处理PyQt的核心功能,如信号和槽机制、事件处理等。
from PyQt6.QtWidgets import * # 从PyQt6的QtWidgets模块中导入所有类和函数,用于创建图形用户界面组件。
class MyWidget(QWidget): # 定义一个名为MyWidget的新类,继承自QWidget。
def __init__(self, parent=None): # 初始化方法,parent参数用于指定父窗口,默认为None。
super(MyWidget, self).__init__(parent) # 调用父类QWidget的初始化方法。
self.setWindowTitle("SpinBox测试") # 设置窗口的标题为“SpinBox测试”。
self.resize(300, 100) # 设置窗口的大小为300x100像素。
self.lb1 = QLabel("选择或者输入数字:") # 创建一个QLabel对象,用于显示文本“选择或者输入数字:”。
self.sb = QSpinBox() # 创建一个QSpinBox对象,这是一个允许用户选择或输入整数的控件。
self.sb.valueChanged.connect(self.valueFunc) # 当QSpinBox的值改变时,连接到一个名为valueFunc的方法。
self.lb2 = QLabel(" ") # 创建一个QLabel对象,初始时显示一个空格,后续用于显示用户选择的数字。
self.lb2.setAlignment(Qt.AlignmentFlag.AlignCenter) # 设置self.lb2的标签文本居中对齐。
hLayout = QHBoxLayout() # 创建一个水平布局对象。
hLayout.addWidget(self.lb1) # 将self.lb1(显示“选择或者输入数字:”的QLabel)添加到水平布局中。
hLayout.addWidget(self.sb) # 将QSpinBox控件添加到水平布局中。
ww = QWidget(self) # 创建一个新的QWidget对象,并将其父窗口设置为当前MyWidget对象。
vLayout_ww = QVBoxLayout(ww) # 为ww创建一个垂直布局对象。
vLayout_ww.addLayout(hLayout) # 将之前创建的水平布局添加到ww的垂直布局中。
vLayout_ww.addWidget(self.lb2) # 将self.lb2(用于显示数字的QLabel)添加到ww的垂直布局中。
def valueFunc(self): # 定义一个方法,用于处理QSpinBox的值改变事件。
self.lb2.setText("输入值: " + str(self.sb.value())) # 设置self.lb2的文本为“输入值: ”加上QSpinBox的当前值。
if __name__ == '__main__': # 检查当前脚本是否是作为主程序运行。
app = QApplication(sys.argv) # 创建一个QApplication对象,这是PyQt6应用程序的入口点。
ex = MyWidget() # 创建一个MyWidget对象。
ex.show() # 显示MyWidget窗口。
sys.exit(app.exec()) # 进入Qt应用程序的主循环,等待用户交互。当应用程序结束时,通过sys.exit退出Python解释器。
这段代码主要实现了一个基于PyQt6的图形用户界面(GUI)应用程序,该应用程序包含一个标签(QLabel)、一个数值选择框(QSpinBox)和另一个标签用于显示用户选择的数值。用户可以通过QSpinBox选择或输入一个数字,然后这个数字会显示在第二个标签中。
使用的布局和控件:
- 布局:
QHBoxLayout
:水平布局,用于将标签和数值选择框水平排列。QVBoxLayout
:垂直布局,用于将水平布局和第二个标签垂直排列。
- 控件:
QWidget
:基础窗口部件。QLabel
:用于显示文本标签的控件。这里使用了两个标签,一个用于显示提示信息“选择或者输入数字:”,另一个用于显示用户选择的数值。QSpinBox
:数值选择框控件,用户可以通过它选择或输入一个整数。
说明:
1.标签和计数器放置在一个水平布局中,然后将其和显示输入值标签放在垂直布局中
2.将计数器的valueChanged信号关联槽函数valueFunc。
关键语句:
-
self.setWindowTitle("SpinBox测试")
:设置窗口的标题为“SpinBox测试”。 -
self.resize(300, 100)
:设置窗口的大小为300x100像素。 -
self.sb = QSpinBox()
:创建一个数值选择框控件。 -
self.sb.valueChanged.connect(self.valueFunc)
:连接数值选择框的valueChanged
信号到valueFunc
槽函数。当用户更改数值选择框中的值时,valueFunc
函数会被调用。 -
self.lb2.setAlignment(Qt.AlignmentFlag.AlignCenter)
:设置第二个标签的文本对齐方式为居中。 -
hLayout = QHBoxLayout()
和vLayout_ww = QVBoxLayout(ww)
:分别创建水平布局和垂直布局对象。 -
hLayout.addWidget(self.lb1)
和hLayout.addWidget(self.sb)
:将提示标签和数值选择框添加到水平布局中。 -
vLayout_ww.addLayout(hLayout)
和vLayout_ww.addWidget(self.lb2)
:将水平布局和第二个标签添加到垂直布局中。 -
def valueFunc(self)
:定义一个槽函数,该函数在用户更改数值选择框中的值时被调用。 -
self.lb2.setText("输入值: "+str(self.sb.value()))
:在槽函数中,获取数值选择框的当前值,并将其转换为字符串,然后更新第二个标签的文本,显示用户选择的数值。
总的来说,这段代码创建了一个简单的窗口,窗口中包含一个提示标签、一个数值选择框和一个用于显示用户选择的数值的标签。用户可以通过数值选择框选择或输入一个整数,然后这个整数会显示在第二个标签中。