1.描述
提供一定范围内的整数值调节。继承自QWidget
2.功能作用
(1) 数值范围
setMaximum(int)
maximum() -> int
setMinimum(int)
minimum() -> int
(2) 当前数值
setValue(int)
value() -> int
(3) 步长
setPageStep(int)
pageStep() -> int
setSingleStep(int)
singleStep() -> int
(4) 是否追踪
# value是否跟随着滑块的位置变化而变化, 默认值为True
setTracking(bool enable)
hasTracking() -> bool
(5) 滑块位置
setSliderPosition(int)
sliderPosition() -> int
(6) 倒立外观
# 滑块大小头翻转
setInvertedAppearance(bool)
invertedAppearance() -> bool
(7) 操作反转
# 上下键位翻转
setInvertedControls(bool)
invertedControls() -> bool
(8) 滑块方向
# 控制外观方向,调整滑块水平或垂直
setOrientation(Qt.Orientation)
orientation() -> Qt.Orientation
(9) 是否按下
setSliderDown(bool)
isSliderDown() -> bool
3.信号
valueChanged()
sliderPressed()
sliderMoved(int value)
sliderReleased()
actionTriggered(int action)
"""
action可能值:
QAbstractSlider.SliderNoAction
QAbstractSlider.SliderSingleStepAdd
QAbstractSlider.SliderSingleStepSub
QAbstractSlider.SliderPageStepAdd
QAbstractSlider.SliderPageStepSub
QAbstractSlider.SliderToMinimum
QAbstractSlider.SliderToMaximum
QAbstractSlider.SliderMove
"""
rangeChanged(int min,int max)
4.相关子类
(1) QSlider
# 描述:垂直或水平滑块,它允许用户沿水平或垂直凹槽移动滑块手柄,并将手柄的位置转换为合法范围内的整数值
# 继承自QAbstractSlider
# 刻度控制
setTickPosition(self, QSlider.TickPosition)
"""
QSlider.NoTicks 不画任何刻度线。
QSlider.TicksBothSides 在凹槽两侧画刻度线。
QSlider.TicksAbove 在(水平)滑块上方绘制刻度线
QSlider.TicksBelow 在(水平)滑块下方绘制刻度线
QSlider.TicksLeft 在(垂直)滑块的左侧绘制刻度线
QSlider.TicksRight 在(垂直)滑块右侧绘制刻度线
"""
sd.tickPosition() -> QSlider.TickPosition
sd.setTickInterval(int) # 值间隔,如果为0,滑块将在singleStep和pageStep之间进行选择
sd.tickInterval() -> int
案例
from PyQt5.Qt import *
import sys
class Slider(QSlider):
def __init__(self, parent=None, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.move(200, 200)
self.resize(30, 200)
self.setTickPosition(QSlider.TicksBothSides)
self.setup_ui()
def setup_ui(self):
self.label = QLabel(self)
self.label.setText("0")
self.label.setStyleSheet("color: red;")
self.label.hide()
def mousePressEvent(self, evt):
super().mousePressEvent(evt)
x = (self.width() - self.label.width()) // 2
y = (1 - self.value() / (self.maximum() - self.minimum())) * (self.height() - self.label.height())
self.label.move(x, int(y))
self.label.adjustSize()
def mouseMoveEvent(self, evt):
super().mouseMoveEvent(evt)
self.label.show()
x = (self.width() - self.label.width()) // 2
y = (1 - self.value() / (self.maximum() - self.minimum())) * (self.height() - self.label.height())
self.label.move(x, int(y))
self.label.setText(str(self.value()))
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("案例")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
slider = Slider(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
(2) QScrollBar
# 描述 滚动条,使用户能够访问比用于显示它的窗口小部件更大的文档部分
# 继承自QAbstractSlider
# 创建
QScrollBar()
# 使用时需手动调整大小
(3) QDial
# 描述 倒圆的范围控制, 比如汽车仪表盘上的速度计
# 继承自QAbstractSlider
# 是否显示刻度
setNotchesVisible(bool)
notchesVisible() -> bool
# 大刻度控制
setPageStep(int)
# 是否启用包裹
setWrapping(bool) # 启用则会在控件周边都设置上刻度, 可以任意指向
wrapping() -> bool
# 凹口之间的目标像素数
setNotchTarget(float)
notchTarget() -> float
# 缺口大小
notchSize() # 默认值1