首先,QSlider是PyQt5中的一个滑动条控件,常用于调整数值范围。
创建QSlider控件
通过以下代码以创建一个水平方向的滑动条:
from PyQt5.QtWidgets import QApplication, QSlider, QMainWindow
app = QApplication([])
main_win = QMainWindow()
slider = QSlider(main_win)
slider.setOrientation(Qt.Horizontal) # 设置方向为水平
main_win.show()
app.exec_()
设置QSlider的取值范围
QSlider的范围可以通过setRange
方法来设置:
slider.setRange(min_val, max_val)
例如:
slider.setRange(0, 100)
设置QSlider的步长
可以通过setSingleStep
方法设置QSlider步长:
slider.setSingleStep(step)
例如:
slider.setSingleStep(1)
接收QSlider的值变化信号
QSlider
提供了valueChanged
信号,来通知控件的值改变了:
slider.valueChanged.connect(function_to_handle_event)
例如,以下代码将QSlider的值和标签绑定在一起:
from PyQt5.QtWidgets import QApplication, QSlider, QLabel, QVBoxLayout, QWidget
app = QApplication([])
main_win = QWidget()
layout = QVBoxLayout()
slider = QSlider()
label = QLabel("0")
layout.addWidget(slider)
layout.addWidget(label)
main_win.setLayout(layout)
slider.valueChanged.connect(lambda: label.setText(str(slider.value())))
main_win.show()
app.exec_()
此时,当滑动条的值改变时,标签内容也会跟随改变。
设置QSlider为不透明背景
可以通过设置QSlider的setStyleSheet
方法来设置控件为不透明的背景:
slider.setStyleSheet("background-color: #ffffff;") # 设置为白色背景
附加示例
下面我们来看一下两个更加全面的应用示例:
示例一:音量调节控件
from PyQt5.QtWidgets import QApplication, QSlider, QLabel, QVBoxLayout, QWidget
app = QApplication([])
main_win = QWidget()
layout = QVBoxLayout()
slider = QSlider()
slider.setOrientation(Qt.Vertical) # 垂直方向
slider.setRange(0, 100) # 范围
slider.setSingleStep(1) # 步长
slider.setTickPosition(QSlider.TicksRight) # 右侧显示刻度
label = QLabel("0")
layout.addWidget(slider)
layout.addWidget(label)
main_win.setLayout(layout)
slider.valueChanged.connect(lambda: label.setText(str(slider.value())))
main_win.show()
app.exec_()
此示例就是一个音量控制的滑动条,你可以通过滑动条来调节音量大小,并且会在标签上显示当前调节的数值。
示例二:球形游戏中的难度选择
from PyQt5.QtWidgets import QApplication, QSlider, QPushButton, QHBoxLayout, QVBoxLayout, QWidget
app = QApplication([])
main_win = QWidget()
layout = QVBoxLayout()
diff_label = QLabel("选择难度:")
layout.addWidget(diff_label)
diff_btns = QWidget()
diff_layout = QHBoxLayout()
diff_slow = QPushButton("慢")
diff_medium = QPushButton("中等")
diff_fast = QPushButton("快")
diff_layout.addWidget(diff_slow)
diff_layout.addWidget(diff_medium)
diff_layout.addWidget(diff_fast)
diff_btns.setLayout(diff_layout)
layout.addWidget(diff_btns)
slider_label = QLabel("选择难度大小")
layout.addWidget(slider_label)
slider = QSlider(Qt.Horizontal)
slider.setRange(0, 2)
slider.setSingleStep(1)
slider.setTickPosition(QSlider.TicksBothSides)
slider.setStyleSheet("background-color: #ffffff;")
layout.addWidget(slider)
main_win.setLayout(layout)
slider_label.setText("选择难度大小:" + ["慢", "中等", "快"][slider.value()])
def on_diff_changed(diff):
slider_label.setText("选择难度大小:" + diff)
diff_slow.clicked.connect(lambda: on_diff_changed("慢"))
diff_medium.clicked.connect(lambda: on_diff_changed("中等"))
diff_fast.clicked.connect(lambda: on_diff_changed("快"))
slider.valueChanged.connect(lambda: on_diff_changed(["慢", "中等", "快"][slider.value()]))
main_win.show()
app.exec_()
此示例模拟了一个球形游戏中的难度选择,你可以通过按钮来选择难度级别,也可以通过滑动条来进一步调节难度大小。