QSpinBox 数值调整元件
QSpinBox 和 QDoubleSpinBox 都是 PyQt5 里的数值调整元件,QSpinBox 只能调整整数,QDoubleSpinBox 可以调整浮点数,这篇教学会介绍如何在 PyQt5 视窗里加入 QSpinBox 数值调整元件,并实做透过数值调整元件调整数值的基本应用。
快速导览:
- PyQt6 版本参考:PyQt6 教学 - QSpinBox、QDoubleSpinBox 数值调整元件
- 因为 Google Colab 不支援 PyQt5,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
加入 QSpinBox、QDoubleSpinBox 数值调整元件
建立 PyQt5 视窗对象后,透过 QtWidgets.QSpinBox(widget) 或 QtWidgets.QDoubleSpinBox(widget) 方法,就能在指定的元件中建立数值调整元件,接着使用 setRange() 方法设定数值调整范围,下方的程序码执行后,会在视窗里加入一个整数调整元件,以及一个浮点数调整元件。
from PyQt5 import QtWidgets, QtGui, QtCore
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
box1 = QtWidgets.QSpinBox(Form) # 加入整數調整元件
box1.move(30,10)
box1.setRange(0,100)
box2 = QtWidgets.QDoubleSpinBox(Form) # 加入浮點數調整元件
box2.move(100,10)
box2.setRange(0,100)
Form.show()
sys.exit(app.exec_())
数值调整元件常用方法
下方列出 QSpinBox、QDoubleSpinBox 的常用方法:
| 方法 | 参数 | 说明 |
|---|---|---|
| setRange() | min, max | 数值调整的范围。 |
| setMaximum() | int or float | 数值调整的最大值。 |
| setMinimum() | int or float | 数值调整的最小值。 |
| setSingleStep() | int or float | 数值调整的间距。 |
| setValue() | int or float | 数值调整的默认值。 |
| setDisabled() | bool | 设定是否禁用,默认 False。 |
| valueChanged.connect() | fn | 数值调整时要执行的函数。 |
| value() | 数值调整目前的数值。 |
下方的程序码执行后,会在画面中放入两个数值调整元件,QSpinBox 的区间为 0~100,默认值 50,调整间距为 10,QDoubleSpinBox 的区间为 0~100,默认值 50,调整间距为 0.2。
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
box1 = QtWidgets.QSpinBox(Form)
box1.move(30,10)
box1.setRange(0,100)
box1.setSingleStep(1)
box1.setValue(50)
box2 = QtWidgets.QDoubleSpinBox(Form)
box2.move(100,10)
box2.setRange(0,100)
box2.setSingleStep(0.2)
box2.setValue(50)
Form.show()
sys.exit(app.exec_())
显示数值调整内容
运用 valueChanged.connect(fn) 方法,就能在调整数值时,执行特定的函数,下方的程序码执行后,会透过 QLabel 显示调整的项目数值。
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
label = QtWidgets.QLabel(Form)
label.setGeometry(10,10,50,30)
def show():
label.setText(str(box1.value()))
box1 = QtWidgets.QSpinBox(Form)
box1.move(80,10)
box1.setRange(0,100)
box1.setSingleStep(1)
box1.setValue(50)
box1.valueChanged.connect(show)
Form.show()
sys.exit(app.exec_())
改用 class 的写法
上方的程序码,亦可改用 class 的写法表示。
from PyQt5 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 200)
self.ui()
def ui(self):
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(10,10,50,30)
self.box1 = QtWidgets.QSpinBox(self)
self.box1.move(80,10)
self.box1.setRange(0,100)
self.box1.setSingleStep(1)
self.box1.setValue(50)
self.box1.valueChanged.connect(self.showMsg)
def showMsg(self):
self.label.setText(str(self.box1.value()))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec_())
微信扫码关注
抖音扫码关注