天天看點

Python Qt GUI設計:QSlider滑動條類(基礎篇—16)

QSlider控件提供了一個垂直或水準的滑動條,滑動條是一個用于控制有界值的典型控件,它允許使用者沿水準或垂直方向在某一範圍内移動滑塊,并将滑塊所在的位置轉換成一個合法範圍内的整數值。

有時候這種方式比輸入數字或者使用SpinBox(計數器)更加自然,隻需要在槽函數中對滑塊所在位置的處理相當于從整數之間的最小值和最高值進行取值。

QSlider類中的常用方法如下表所示:

Python Qt GUI設計:QSlider滑動條類(基礎篇—16)
QSlider類中的常用信号如下表所示:
Python Qt GUI設計:QSlider滑動條類(基礎篇—16)
一個滑塊條控件可以以水準或垂直的方式顯示,在構造函數中進行設定如下所示:

self.sp=QSlider(Qt.Horizontal)
self.sp=QSlider(Qt.Vertical)      

來看看QSlider滑動條類的示例,效果如下所示:

Python Qt GUI設計:QSlider滑動條類(基礎篇—16)

這裡示例中,在PyQt 5的視窗中使用QSlider滑動條控件,随着滑動條的移動,标簽的字号大小也随着發生變化。

将一個标簽和一個水準滑動條放置在一個垂直布局管理器中。将滑塊的valueChanged信号連接配接到valuechange()函數。槽函數valuechange()讀取滑塊的目前值,并将其作為字号的大小。

使用setTickInterval(5)設定刻度間隔後,在繪制刻度時就會有9個刻度點(從10開始,每隔步長5繪制一個點,到50處結束),也就是說,刻度點個數=(最大值-最小值刻度間隔+1,本例中的刻度點個數為:(50-10)/5 +1=9。

實作代碼如下所示:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class SliderDemo(QWidget):
    def __init__(self, parent=None):
  super(SliderDemo, self).__init__(parent)
  self.setWindowTitle("QSlider 例子")  
  self.resize(300, 100)
       
  layout = QVBoxLayout()
  self.l1 = QLabel("Hello PyQt5")
  self.l1.setAlignment(Qt.AlignCenter)
  layout.addWidget(self.l1)
        # 水準方向
  self.sl = QSlider(Qt.Horizontal)
        #設定最小值
  self.sl.setMinimum(10)
  #設定最大值
  self.sl.setMaximum(50)
  # 步長
  self.sl.setSingleStep( 3 ) 
  # 設定目前值
  self.sl.setValue(20)
  # 刻度位置,刻度在下方
  self.sl.setTickPosition(QSlider.TicksBelow)
        # 設定刻度間隔
  self.sl.setTickInterval(5)
  layout.addWidget(self.sl)
        # 連接配接信号槽
  self.sl.valueChanged.connect(self.valuechange)
  self.setLayout(layout)
                     
    def valuechange(self):
  print('current slider value=%s' % self.sl.value() )
  size = self.sl.value()
  self.l1.setFont(QFont("Arial",size))
                     
if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = SliderDemo()
    demo.show()
    sys.exit(app.exec_())