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 教程。