PyQt5基本窗口控件(QSlider(滑动条))
QSlider(滑动条)
QSlider控件提供了一个垂直或水平的滑动条,滑动条是一个用于控制有界值的
典型控件,它允许用户沿水平或垂直方向在某一范围内移动滑块,并将滑块所在的
位置转换成一个合法范围内的整数值。有时候这种方式比输入数字或者使用SpinBox
(计数器)更加自然。在槽函数中对滑块所在位置的处相当于从整数之间的最小值
和最高值进行取值。
一个滑块条控件可以以水平或垂直的方式显示,在构造函数中进行设置。
self.sp=QSlider(Qt.Horizontal)
self.sp=QSlider(Qt.Vertical)
QSlider类中的常用方法如表4一19所示。
方法 | 描述 |
---|---|
setMinimum() | 设置滑动条控件的最小值 |
setMaximum() | 设置滑动条控件的最大值 |
setSingleStep() | 设置滑动条控件递增/递喊的步长值 |
setValue() | 设置滑动条控件的值 |
value() | 获得滑动条控件的值 |
setTickInterval() | 设置刻度间隔 |
setTickPosition() | 设置刻度标记的位置,可以输入一个枚举值,这个枚举值指定刻度线相对于块和用户搡作的位置。以下是可以输入的枚举值 QSIider.NoTicks,不绘制任何刻度线;QSlider.TicksBothSides,在滑块的两侧绘制刻度线;QSIider.TicksAbove.在(水平)滑块上方绘制刻度线;QSlider.TicksBeIow,《水平)滑块下方绘制刻度线;QSlider.TicksLeft,在(垂直)块左侧绘制刻度线;QSIider.TicksRight,在(垂直)满块右侧绘制刻线 |
QSlider类中的常用信号如表4-20所示。
信号 | 描述 |
---|---|
vaIueChanged | 描述当滑块的佰发生改变时发射此信号.此信号是最常用的 |
sliderPressed | 当用户按下滑块时发射此信号 |
sliderMoved | 当用户拖动滑块时发射此信号 |
sliderReleased | 当用户释放滑块时发射此信号 |
QSlider的使用
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('Slider Demo')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=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.sl.setFont(QFont('Arial',size))if __name__ == '__main__':app=QApplication(sys.argv)demo=SliderDemo()demo.show()sys.exit(app.exec_())
运行效果:
代码分析
在这个例子中,将一个标签和一个水平滑动条放置在一个垂直布局管理器中。
将滑块的valueChanged信号连接到valuechange()函数。
self.sl.valueChanged.connect(self.valueChange)
槽函数valuechange()读取滑块的当前值,并将其作为字号的大小。
size=self.sl.value()self.sl.setFont(QFont('Arial',size))
使用setTickInterval(5)设置刻度间隔后,在绘制刻度时就会有9个刻度点(从
10开始,每隔步长5绘制一个点,到50处结束),也就是说,刻度点个数=(最大
值-最小值》刻度间隔+1,本例中的刻度点个数为:(50-10)/5+1=9。
# 设置最小值
self.sl.setMinimum(10)# 设置最大值
self.sl.setMaximum(50)
# 设置刻度间隔
self.sl.setTickInterval(5)