滑块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

样式:

滑块QAbstractSlider_滑块_02

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-圆形滑块

滑块QAbstractSlider_子类_03

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_())