一、Qslider
QSlider是一個滑動條,可以設置成水平或垂直放置。最常用的方法允許用戶在某一范圍內互動該滑塊,並將滑塊的位置轉換成一個整數值(int類型),這種方式可以在某一個范圍內平順的變動,並觸發valuechangd信號,產生相應變化。但QSlider能發射的信號並不局限於這一種:
- valuechanged。滑塊位置變動時發射此信號;
- sliderPressed。當用戶按下滑塊時就會發射該信號;
- sliderMoved。當用戶拖動滑塊時發射信號;
- sliderReleased。用戶釋放滑塊時發射該信號。

1 import sys,os 2 from PyQt5.QtWidgets import QWidget,QSlider,QApplication,QLabel,QVBoxLayout 3 from PyQt5.QtGui import QIcon 4 from PyQt5.QtCore import Qt 5 6 path = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) 7 8 class MyWindow(QWidget): 9 10 def __init__(self): 11 super().__init__() 12 self.initUI() 13 14 def initUI(self): 15 self.setWindowTitle('QSlider示例') 16 self.setWindowIcon(QIcon(r'%s\4.圖標素材\chuan.ico' % path)) 17 self.setGeometry(600,300,300,150) 18 19 self.lbl = QLabel('當前值為:0') 20 self.sl = QSlider(Qt.Horizontal) 21 self.sl.setMaximum(20) #設定最大值 22 self.sl.setMinimum(-20) #設定最小值 23 self.sl.setSingleStep(2) #設定最小值 24 25 vbx = QVBoxLayout() 26 vbx.addWidget(self.lbl) 27 vbx.addWidget(self.sl) 28 self.setLayout(vbx) 29 30 self.sl.valueChanged.connect(self.valuechanged) 31 32 def valuechanged(self): 33 #print(type(self.sl.value())) 34 self.lbl.setText('當前值為:' + str(self.sl.value())) 35 36 if __name__ == '__main__': 37 app = QApplication(sys.argv) 38 win = MyWindow() 39 win.show() 40 sys.exit(app.exec_())
示例中使用Qt.Horizontal將滑塊設置為水平,也可以通過Qt.Vertical將滑塊設置為垂直的。需要說明的是通過setSingleStep()設置步長后,只是通過鍵盤移動滑塊時,步長變為設定值。通過鼠標移動滑塊時,步長仍然為1。而且,通過鍵盤的Home 鍵可將滑塊移動至起始位置,即最小值。同理,End 鍵移動至結束位置(最大值)。如果不設置最大值和最小值,默認范圍是0到99.
除此之外,Qslider還可以設置刻度標記,並且標記的位置可以調整。
QSlider::NoTicks | 0 | 不繪制任何刻度線 |
QSlider::TicksBothSides | 3 | 在滑塊的兩側繪制刻度線 |
QSlider::TicksAbove | 1 | 在(水平)滑塊上方繪制刻度線 |
QSlider::TicksBelow | 2 | 在(水平)滑塊下方繪制刻度線 |
QSlider::TicksLeft | TicksAbove | 在(垂直)滑塊左側繪制刻度線 |
QSlider::TicksRight | TicksBelow | 在(垂直)滑塊右側繪制刻度線 |

二、QSpinBox
QSpinBox是一個計數器控件,允許用戶選擇一個整數值通過單擊向上向下或者按鍵盤上的上下鍵來增加減少當前顯示的值。不過也可以手動輸入指定值 。和Slider一樣,默認的取值范圍是0到99,每次改變的步長是1 。
QSpinBox類和QDoubleSpinbox類均派生自QAbstractSpinBox類,QSpinBox用於處理整數值,QDoubleSpinBox則用於處理浮點數值,他們之間的區別就是處理數據的類型不同,其他功能基本相同,QDoubleSpinBox的默認精度是兩位小數,但可以通過setDecimals()來改變。

1 import sys,os 2 from PyQt5.QtWidgets import QWidget,QSpinBox,QApplication,QLabel,QVBoxLayout 3 from PyQt5.QtGui import QIcon 4 from PyQt5.QtCore import Qt 5 6 path = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) 7 8 class MyWindow(QWidget): 9 10 def __init__(self): 11 super().__init__() 12 self.initUI() 13 14 def initUI(self): 15 self.setWindowTitle('QSpinBox示例') 16 self.setWindowIcon(QIcon(r'%s\4.圖標素材\chuan.ico' % path)) 17 self.setGeometry(600,300,200,150) 18 19 self.lbl = QLabel('當前值為:0') 20 self.lbl.setAlignment(Qt.AlignCenter) 21 self.sp = QSpinBox() 22 # self.sp.setMaximum(-10) 23 # self.sp.setMaximum(20) 24 self.sp.setRange(-10,10) 25 self.sp.setSingleStep(2) 26 27 vbx = QVBoxLayout() 28 vbx.addWidget(self.lbl) 29 vbx.addWidget(self.sp) 30 self.setLayout(vbx) 31 32 self.sp.valueChanged.connect(self.valuechanged) 33 34 def valuechanged(self): 35 self.lbl.setText('當前值為:' + str(self.sp.value())) 36 37 if __name__ == '__main__': 38 app = QApplication(sys.argv) 39 win = MyWindow() 40 win.show() 41 sys.exit(app.exec_())
最大值和最小值可以通過setMaxmum()和setMinimum()分別設置,也可以通過setRange()一次設定好范圍。注意,親測setRange()不能設置步長。