QSpinBox、QDoubleSpinBox 數值調整元件
QSpinBox 和 QDoubleSpinBox 都是 PyQt6 裡的數值調整元件,QSpinBox 只能調整整數,QDoubleSpinBox 可以調整浮點數,這篇教學會介紹如何在 PyQt6 視窗裡加入 QSpinBox 數值調整元件,並實做透過數值調整元件調整數值的基本應用。
快速導覽:
因為 Google Colab 不支援 PyQt6,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。
加入 QSpinBox、QDoubleSpinBox 數值調整元件
建立 PyQt6 視窗物件後,透過 QtWidgets.QSpinBox(widget)
或 QtWidgets.QDoubleSpinBox(widget)
方法,就能在指定的元件中建立數值調整元件,接著使用 setRange()
方法設定數值調整範圍,下方的程式碼執行後,會在視窗裡加入一個整數調整元件,以及一個浮點數調整元件。
from PyQt6 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())
class 寫法:
from PyQt6 import QtWidgets, QtGui
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.box1 = QtWidgets.QSpinBox(self) # 加入整數調整元件
self.box1.move(30,10)
self.box1.setRange(0,100)
self.box2 = QtWidgets.QDoubleSpinBox(self) # 加入浮點數調整元件
self.box2.move(100,10)
self.box2.setRange(0,100)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
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 PyQt6 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())
class 寫法:
from PyQt6 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.box1 = QtWidgets.QSpinBox(self)
self.box1.move(30,10)
self.box1.setRange(0,100)
self.box1.setSingleStep(1)
self.box1.setValue(50)
self.box2 = QtWidgets.QDoubleSpinBox(self)
self.box2.move(100,10)
self.box2.setRange(0,100)
self.box2.setSingleStep(0.2)
self.box2.setValue(50)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
顯示數值調整內容
運用 valueChanged.connect(fn)
方法,就能在調整數值時,執行特定的函式,下方的程式碼執行後,會透過 QLabel 顯示調整的項目數值。
from PyQt6 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 寫法 ( 注意不能使用 show 作為方法名稱,會覆寫基底的 show 方法造成無法顯示 ):
from PyQt6 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.showText)
def showText(self):
self.label.setText(str(self.box1.value()))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~