上一章我们学习了QAbstractSlider的用法,在讲功能的时候我们是借助了它的子类QSlider来实现的,今天来学习一下它的三个子类——QSlider、QScroll和QDial。
一.QSlider控件
QSlider的信号全继承自其父类,还有几个自身的功能
1.标尺位置
QSlider.setTickPosition(self, position: 'QSlider.TickPosition') #标尺设置 QSlider.tickPosition() #标尺位置获取——>int # type: 'QSlider.TickPosition' #标尺位置枚举值 NoTicks = ... # 0——无刻度 TicksAbove = ... # 1——在水平的滑块上方(竖直布局在左侧) TicksLeft = ... # 1水平上方,数值左侧 TicksBelow = ... # 2——水平下方,竖直右侧 TicksRight = ... # 2——水平下方,竖直右侧 TicksBothSides = ... # 3——两侧
2.标尺密度间隔
这个间隔是实际值的间隔,而不是像素值。比方说范围是0-100,如果间隔设为20则每20画一个标尺线。
QSlider.setTickInterval(self, ti: int) #设定标尺间隔 QSlider.tickInterval() #获取标尺间隔
3.案例
基于QSlider我们做一个案例分析,要实现下面的效果
※在滑动的过程中有标签来显示当前的值
※标签位置在滑块上并且始终随着滑块的滑动
from PyQt5.Qt import * from PyQt5 import QtGui import sys class MySlider(QSlider): def __init__(self,parent = None,*args,**kwargs): super().__init__(parent,*args,**kwargs) self.setup_UI() def setup_UI(self): self.label = QLabel('0',self) self.label.hide() def mousePressEvent(self, ev: QtGui.QMouseEvent): super().mousePressEvent(ev) #增加功能 x = (self.width()-self.label.width())/2 y = (1-self.value()/(self.maximum()-self.minimum()))*(self.height()-self.label.height()) self.label.move(x,y) self.label.show() self.label.setText(str(self.value())) def mouseMoveEvent(self, ev: QtGui.QMouseEvent): super().mouseMoveEvent(ev) x = (self.width() - self.label.width()) / 2 y = (1 - self.value() / (self.maximum() - self.minimum())) * (self.height() - self.label.height()) self.label.move(x,y) self.label.show() self.label.setText(str(self.value())) self.label.adjustSize() def mouseReleaseEvent(self, ev: QtGui.QMouseEvent): super().mouseReleaseEvent(ev) self.label.hide() class Window(QWidget): def __init__(self): super().__init__() self.UI_test() def UI_test(self): self.resize(500,300) slider = MySlider(self) label = QLabel('0',self) slider.move(50,50) pass if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())