PyQt - QSlider 控制元件 & 訊號



QSlider 類物件為使用者提供了一個槽,使用者可以在其上移動一個滑塊。它是一個經典的控制有界值的控制元件。滑塊在槽中的位置等效於控制的下限和上限之間的整數。

可以透過在建構函式中指定方向,以水平或垂直方式顯示滑塊控制元件。

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

下表列出了 QSlider 類的一些常用方法:

以下是 QSlider 最常用的方法。

序號 方法 & 描述
1

setMinimum()

設定滑塊的下限

2

setMaximum()

設定滑塊的上限

3

setSingleStep()

設定增量/減量步長

4

setValue()

以程式設計方式設定控制元件的值

5

value()

返回當前值

6

setTickInterval()

在槽上設定刻度的數量

7

setTickPosition()

在槽上放置刻度。值如下:

QSlider.NoTicks 無刻度
QSlider.TicksBothSides 兩側都有刻度
QSlider.TicksAbove 滑塊上方的刻度
QSlider.TicksBelow 滑塊下方的刻度
QSlider.TicksLeft 滑塊左側的刻度
QSlider.TicksRight 滑塊右側的刻度

QSlider 訊號

序號 方法 & 描述
1

valueChanged()

當滑塊的值發生變化時

2

sliderPressed()

當用戶開始拖動滑塊時

3

sliderMoved()

當用戶拖動滑塊時

4

sliderReleased()

當用戶釋放滑塊時

valueChanged() 訊號是最常使用的訊號。

示例

以下示例演示了上述功能。一個標籤和一個水平滑塊放置在垂直佈局中。滑塊的 valueChanged() 訊號連線到 valuechange() 方法。

self.sl.valueChanged.connect(self.valuechange)

槽函式 valuechange() 讀取滑塊的當前值,並將其用作標籤標題的字型大小。

size = self.sl.value()
self.l1.setFont(QFont("Arial",size))

完整的程式碼如下:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class sliderdemo(QWidget):
   def __init__(self, parent = None):
      super(sliderdemo, self).__init__(parent)

      layout = QVBoxLayout()
      self.l1 = QLabel("Hello")
      self.l1.setAlignment(Qt.AlignCenter)
      layout.addWidget(self.l1)
		
      self.sl = QSlider(Qt.Horizontal)
      self.sl.setMinimum(10)
      self.sl.setMaximum(30)
      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)
      self.setWindowTitle("SpinBox demo")

   def valuechange(self):
      size = self.sl.value()
      self.l1.setFont(QFont("Arial",size))
		
def main():
   app = QApplication(sys.argv)
   ex = sliderdemo()
   ex.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   main()

以上程式碼產生以下輸出:

Widget and Signal Output

當滑塊的滑塊在滑塊上移動時,標籤的字型大小會發生變化。

廣告

© . All rights reserved.