滑块QAbstractSlider

继承于 QWidget 

抽象类-必须子类化

提供的范围内的整数值

QAbstractSlider

import sys
from PyQt5.QtWidgets import QApplication, QWidget,QAbstractSlider,QSlider,QLabel,QPushButton
from PyQt5.QtCore import Qt

class Demo(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(300,300)

        self.label=QLabel('0   ',self)
        self.label.move(80,20)

        #print(QAbstractSlider.__subclasses__())  #返回QAbstractSlider有几个子类
        #共有三个子类:QDial  QScrollBar   QSlider

        #QAbstractSlider是抽象类,在窗口中不能显示,所以下面借助于它的子类来验证它的功能

        sd=QSlider(self)  #创建一个竖直滑块
        sd.move(50,50)

        sd.setMaximum(80)  #设置最大值,默认99
        #maximum() -> int  返回最大值

        sd.setMinimum(10)  #设置最小值,默认0
        #minimum() -> int   返回最小值

        sd.setValue(60)  #设置当前值
        print(sd.value())  #返回当前值

        sd.setSingleStep(5)  #设置単步步长--小步长
        #按键盘的上下箭头才有效
        #singleStep() -> int  返回単步步长

        sd.setPageStep(10)  #设置页步长
        #按键盘的PgUp PgDn才有效
        #pageStep() -> int   返回页步长

        sd.setTracking(True)  #是否追踪-默认值True
        #如果设为False 鼠标拖拽滑块时,只有释放鼠标后,才会发出valueChanged信号
        #hasTracking() -> bool  返回是否追踪

        sd.setSliderPosition(50)  #设置滑块的位置
        #如果setTracking设置为False时,这条指令不会发出valueChanged信号
        #sliderPosition() -> int  返回滑块的位置

        sd.setInvertedAppearance(True)  #倒立外观-大小头反过来
        #invertedAppearance() -> bool  返回是否倒立外观

        sd.setInvertedControls(True)  #操作反转--上下键位反过来
        #invertedControls() -> bool  返回是否操作反转

        sd.setOrientation(Qt.Vertical)  #设置滑块方向
        #Qt.Horizontal   水平
        #Qt.Vertical    竖直--默认
        #orientation() -> Qt.Orientation  返回滑块的方向

        #setSliderDown(bool)  设置是否按下
        #isSliderDown() -> bool    返回isSliderDown() -> bool

        # 信号
        sd.valueChanged.connect(self.AA)  # 滑块的值发生改变时发出信号
        # 会向槽函数传递一个值--滑块对应的值

        #sd.sliderPressed.connect(self.BB)  #滑块被按下时发出信号

        #sd.sliderMoved.connect(self.CC)  #滑块被移动时发出信号
        # 会向槽函数传递一个值--滑块对应的值

        #sd.sliderReleased.connect(self.DD)   #滑块被释放时发出信号

        sd.actionTriggered.connect(self.EE)  #滑块有行为时发出信号
        #会向槽函数传递一个参数--行为值
        #QAbstractSlider.SliderSingleStepAdd=1   単步步长增加时
        #QAbstractSlider.SliderSingleStepSub=2  単步步长减小时
        #QAbstractSlider.SliderPageStepAdd=3   页步长增加时
        #QAbstractSlider.SliderPageStepSub=4   页步长减小时
        #QAbstractSlider.SliderMove=7    滑块移动时

        #rangeChanged(int min,int max)  当最大值最小值发生变化时

    def EE(self,val):
        print('滑块的行为是:',val)
    def DD(self):
        print('滑块被释放了')
    def CC(self,val):
        print('滑块被移动了',val)
    def AA(self,val):
        self.label.setText(str(val))
        pass
    def BB(self):
        print('滑块被按下了')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

子类 QSlider

样式:

import sys
from PyQt5.QtWidgets import QApplication, QWidget,QSlider

class Demo(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(300,300)

        sd=QSlider(self)
        sd.move(100,50)
        sd.resize(30,250)

        sd.setTickPosition(QSlider.TicksBothSides)  #设置刻度线
        #QSlider.NoTicks=0  不要画任何刻度线。
        #QSlider.TicksBothSides=3  在凹槽两侧画刻度线。
        #QSlider.TicksAbove=1  在(水平)滑块上方绘制刻度线
        #QSlider.TicksBelow=2  在(水平)滑块下方绘制刻度线
        #QSlider.TicksLeft=1  在(垂直)滑块的左侧绘制刻度线
        #QSlider.TicksRight=2  在(垂直)滑块右侧绘制刻度线
        #sd.tickPosition() -> QSlider.TickPosition  返回刻度线

        sd.setTickInterval(5)  #刻度线间隔
        #sd.tickInterval() -> int   返回刻度线间隔


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

 子类 QScrollBar  

import sys
from PyQt5.QtWidgets import QApplication, QWidget,QScrollBar
from PyQt5.QtCore import Qt

class Demo(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(300,300)

    #使用户能够访问比用于显示它的窗口小部件更大的文档部分
    #一般是结合QAbstractScrollArea使用
    #滚动条通常包括四个单独的控件:滑块,滚动箭头和页面控件
        sb=QScrollBar(self)
        sb.resize(20,280)
        sb.move(270,0)
        sb1 = QScrollBar(self)
        sb1.setOrientation(Qt.Horizontal)
        sb1.resize(280,20)
        sb1.move(0,280)

        #滑块的长度=页步长

        sb.valueChanged.connect(self.AA)
        sb.grabKeyboard()  #捕获键盘
        #这个有2个控件可以捕获键盘,不设置的话系统不知道让哪个控件来捕获


    def AA(self,val):
        print(val)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

QDial-圆形滑块

import sys
from PyQt5.QtWidgets import QApplication, QWidget,QDial
from PyQt5.QtCore import Qt

class Demo(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(300,300)

        dl=QDial(self)
        dl.move(100,100)
        dl.valueChanged.connect(self.AA)

        dl.setNotchesVisible(True)  #是否显示刻度
        #notchesVisible() -> bool  返回是否显示刻度
        #大刻度--页步长     小刻度--単步步长

        #dl.setWrapping(True)   #是否启用包裹
        #启用则会在控件周边都设置上刻度, 可以任意指向
        #wrapping() -> bool  返回是否启用包裹

        dl.setNotchTarget(10)  #设置多少间距一个刻度
        #浮点数,表示值10一个刻度
        #notchTarget() -> float  返回这个值

        
    def AA(self,val):
        print(val)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

天子骄龙

原文地址:https://www.cnblogs.com/liming19680104/p/11011385.html