QSpinBox 和 QDoubleSpinBox 都是 PyQt5 裡的數值調整元件,QSpinBox 只能調整整數,QDoubleSpinBox 可以調整浮點數,這篇教學會介紹如何在 PyQt5 視窗裡加入 QSpinBox 數值調整元件,並實做透過數值調整元件調整數值的基本應用。
因為 Google Colab 不支援 PyQt5,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。

建立 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_())

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^