PyQt QSlider
最后修改于 2023 年 8 月 24 日
在本文中,我们将展示如何使用 QSlider 部件。
访问 PyQt6 教程,或列出所有 PyQt 教程。
,阅读PyQt QSlider
QSlider
是一个用于控制有界值的部件。滑块可以是水平的,也可以是垂直的。用户通过移动滑块来选择值。
可能值的范围通过 setMinimum
、setMaximum
或 setRange
来指定。此外,还可以选择显示刻度线。
当滑块的值发生变化时,会发出 valueChanged
信号。
QSlider 水平滑块示例
在下面的示例中,我们创建一个水平滑块。
#!/usr/bin/python from PyQt6.QtWidgets import (QWidget, QSlider, QHBoxLayout, QLabel, QApplication) from PyQt6.QtCore import Qt import sys class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout() sld = QSlider(Qt.Orientation.Horizontal, self) sld.setRange(0, 100) sld.setPageStep(5) sld.valueChanged.connect(self.updateLabel) self.label = QLabel('0', self) self.label.setAlignment(Qt.AlignmentFlag.AlignCenter | Qt.AlignmentFlag.AlignVCenter) self.label.setMinimumWidth(80) hbox.addWidget(sld) hbox.addSpacing(15) hbox.addWidget(self.label) self.setLayout(hbox) self.setGeometry(300, 300, 350, 250) self.setWindowTitle('QSlider') self.show() def updateLabel(self, value): self.label.setText(str(value)) def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
通过移动滑块的滑块,我们改变相邻标签中显示的值。
sld = QSlider(Qt.Orientation.Horizontal, self) sld.setRange(0, 100)
这里创建了一个水平滑块。其值范围通过 setRange
设置。
sld.setPageStep(5)
页面步长是一个较大的步长,通过 PageUp 或 PageDown 键,或者通过在滑块外单击滑块条来执行。
sld.valueChanged.connect(self.updateLabel)
我们将 self.updateLabel
处理程序连接到 valueChanged
信号。
self.label = QLabel('0', self) self.label.setAlignment(Qt.AlignmentFlag.AlignCenter | Qt.AlignmentFlag.AlignVCenter) self.label.setMinimumWidth(80)
我们为标签设置了最小尺寸,以防止在重绘标签时滑块调整大小。
def updateLabel(self, value): self.label.setText(str(value))
在 updateLabel
处理程序中,我们将标签的文本更新为新选择的 QSlider
值。

垂直 QSlider
下一个示例展示了一个垂直滑块。
#!/usr/bin/python from PyQt6.QtWidgets import (QWidget, QSlider, QHBoxLayout, QLabel, QApplication) from PyQt6.QtCore import Qt import sys class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout() sld = QSlider(Qt.Orientation.Vertical, self) sld.setRange(0, 100) sld.setPageStep(5) sld.valueChanged.connect(self.changeValue) self.label = QLabel("0", self) self.label.setStyleSheet( 'QLabel { background: #007AA5; border-radius: 3px;}') self.label.setAlignment(Qt.AlignmentFlag.AlignCenter | Qt.AlignmentFlag.AlignVCenter) self.label.setMinimumWidth(80) hbox.addStretch() hbox.addWidget(sld) hbox.addSpacing(15) hbox.addWidget(self.label) hbox.addStretch() self.setLayout(hbox) self.setGeometry(300, 300, 350, 250) self.setWindowTitle('QSlider') self.show() def changeValue(self, value): self.label.setText(str(value)) def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
要创建一个垂直滑块,我们将 Qt.Orientation.Vertical
传递给 QSlider
的构造函数。
self.label = QLabel('0', self) self.label.setStyleSheet( 'QLabel { background: #007AA5; border-radius: 3px;}')
我们通过设置标签的样式表来创建一个漂亮的圆角矩形。

QSlider 音量控制
以下示例展示了如何使用滑块来管理音量控制。
#!/usr/bin/python from PyQt6.QtWidgets import (QWidget, QSlider, QHBoxLayout, QLabel, QApplication) from PyQt6.QtCore import Qt from PyQt6.QtGui import QPixmap import sys class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout() sld = QSlider(Qt.Orientation.Horizontal, self) sld.valueChanged.connect(self.changeValue) self.label = QLabel(self) self.label.setPixmap(QPixmap('mute.png')) hbox.addWidget(sld) hbox.addSpacing(40) hbox.addWidget(self.label) self.setLayout(hbox) self.setGeometry(400, 300, 350, 200) self.setWindowTitle('Volume control') self.show() def changeValue(self, value): if value == 0: self.label.setPixmap(QPixmap('mute.png')) elif 0 < value <= 30: self.label.setPixmap(QPixmap('min.png')) elif 30 < value < 80: self.label.setPixmap(QPixmap('med.png')) else: self.label.setPixmap(QPixmap('max.png')) def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
在我们的示例中,我们模拟了一个音量控制。通过拖动滑块的滑块,我们改变标签上的图像。
self.label = QLabel(self) self.label.setPixmap(QPixmap('mute.png'))
我们创建一个 QLabel
部件,并为其设置一个初始的静音图像。
sld.valueChanged.connect(self.changeValue)
我们将 valueChanged
信号连接到用户自定义的 changeValue
方法。
if value == 0: self.label.setPixmap(QPixmap('mute.png')) ...
根据滑块的值,我们为标签设置一个图像。在上面的代码中,如果滑块的值等于零,我们将 mute.png
图像设置给标签。

在本文中,我们介绍了 PyQt 的 QSlider
部件。
作者
列出所有 PyQt 教程。