一、抽象滑块
QScrollBar、QSlider 和 QDail 都是从 QAbstractSlider 类继承而来的,因此它们的多数方法是相同的。
我们可以在终端中使用 pip 安装 pyside6 模块。
pip install pyside6
QAbstractSlider 类的常用方法如下:
# 实例方法
orientation() -> Qt.Orientation # 获取控件方向
setInvertedAppearance(arg__1:bool) -> None # 设置几何外观左右和上下颠倒
invertedAppearance() -> bool # 获取几何外观是否颠倒
setInvertedControls(arg__1:bool) -> None # 设置键盘上的PageUp和PageDown键是否反向
invertedControls() -> bool # 获取是否进行逆向控制
setMinimum(arg__1:int) -> None # 设置最小值
minimum() -> int # 获取最小值
setMaximum(arg__1:int) -> None # 设置最大值
maximum() -> int # 获取最大值
setPageStep(arg__1:int) -> None # 设置每次单击滑动区域,控件值的变化量
pageStep() -> int # 获取单击滑动区域,控件值的变化量
setSingleStep(arg__1:int) -> None # 设置单击两端的箭头或拖动滑块时,控件值的变化量
singleStep() -> int # 获取单击两端的箭头或拖动滑块时,控件值的变化量
setSliderDown(arg__1:bool) -> None # 设置滑块是否被按下,该值的设置会影响isSliderDown()的返回值
isSliderDown() -> bool # 用鼠标移动滑块时,返回True,单击两端的箭头或滑动区域时,返回False
setSliderPosition(arg__1:int) -> None # 设置滑块的位置
sliderPosition() -> int # 获取滑块位置
setTracking(enable:bool) -> None # 设置是否追踪滑块的连续变化
value() -> int # 获取滑块的值# 槽函数
setOrientation(arg__1: Qt.Orientation) -> None # 设置控件方向,可设置为水平或垂直方向
setRange(min: int, max: int) -> None # 设置滑块范围
setValue(arg__1:int) -> None # 设置滑块的值
要改变滑块的位置或值,可以用鼠标拖动滑块的位置或单击两端的箭头,如果焦点在控件上,还可以通过键盘上的左右箭头来控制,这时值的增加或减少的步长由 setSingleStep()
方法来设置。另外还可以单击滑块的滑行轨道,或者用键盘上的 PageUp 和 PageDown 键来改变值,这时值的增加或减少的步长由 setPageStep()
方法来设置。
如果用键盘来移动滑块的位置,滑块控件默认是不获得焦点的,可以通过 setFocusPolicy(Qt.FocusPolicy)
方法设置其能获得焦点。
当设置 setTracking()
为 False 时,用鼠标拖动滑块连续移动时(鼠标按住不松开),控件不发送 valueChanged 信号。
滑块常用信号及其说明如下:
actionTriggered(action:int) # 动作触发时发射信号
rangeChanged(min:int, max:int) # 滑块范围改变时发射信号
sliderMoved(position:int) # 滑块移动时发射信号
sliderPressed() # 滑块按下时发射信号
sliderReleased() # 滑块释放时发射信号
valueChanged(value:int) # 值改变时发射信号
actionTriggered(action:int) 信号在用户用鼠标或键盘键改变滑块位置时发送,根据改变方式的不同,信号的参数值也不同,action 的值可以取值如下:
QAbstractSlider.SliderAction.SliderNoAction
QAbstractSlider.SliderAction.SliderSingleStepAdd
QAbstractSlider.SliderAction.SliderSingleStepSub
QAbstractSlider.SliderAction.SliderPageStepAdd
QAbstractSlider.SliderAction.SliderPageStepSub
QAbstractSlider.SliderAction.SliderToMinimum
QAbstractSlider.SliderAction.SliderToMaximum
QAbstractSlider.SliderAction.SliderMove
二、滑块控件
PySide6 中提供了两个滑块控件,分别是水平滑块 HorizontalSlider 和垂直滑块 VerticalSlider,但这两个滑块控件对应的类都是 QSlider
类,该类提供一个 setOrientation(arg__1)
方法,通过设置该方法的参数,可以将滑块显示为水平或者垂直。
用 QSlider 类创建实例对象的方法如下:
QSlider(parent:QWidget=Noone)
QSlider(orientation:Qt.Orientation, parent:QWidget=None)
其中,parent 是 窗口 或者 容器 类控件,Qt.Orientation 可以取 Qt.Orientation.Horizontal 和 Qt.Orientation.Vertical,表示水平和竖直。
QSlider 滑块类的特有方法及其说明如下:
setTickInterval(ti:int) -> None # 设置滑块的刻度间隔
setTickPosition(position:QSlider.TickPosition) -> None # 设置刻度的位置
QSlider 可以设置刻度,方法是 setTickInterval(int)
,其中参数 int 是刻度间距。用 tickInterval() 方法可以获取刻度间距值,其中 QSlider.TickPosition 可以取值如下:
QSlider.TickPosition.NoTicks # 不显示刻度,这是默认
QSlider.TickPosition.TicksBothSides # 在滑块的两侧都显示刻度
QSlider.TickPosition.TicksAbove # 在水平滑块的上方显示刻度
QSlider.TickPosition.TicksBelow # 在水平滑块的下方显示刻度
QSlider.TickPosition.TicksLeft # 在垂直滑块的左侧显示刻度
QSlider.TickPosition.TicksRight # 在垂直滑块的右侧显示刻度
import sysfrom PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QSlider
from PySide6.QtCore import Qtclass MyWidget(QWidget):def __init__(self):# 1.调用父类Qwidget类的__init__()方法super().__init__()# 2.调用setupUi()方法初始化页面self.setup_ui()def setup_ui(self):# 1.设置窗口对象大小self.resize(700, 500)# 2.创建滑块控件slider = QSlider(self)slider.resize(500, 30)# 3.设置滑块范围slider.setRange(0, 100)# 4.设置滑块的当前值slider.setValue(50)# 5.设置滑块的布局方向slider.setLayoutDirection(Qt.LayoutDirection.LayoutDirectionAuto)# 6.设置滑块的显示方向slider.setOrientation(Qt.Orientation.Horizontal)# 7.设置滑块是否以反方向显示进度slider.setInvertedAppearance(False)# 8.设置步长slider.setPageStep(5)slider.setSingleStep(5)# 9.设置滑块的刻度间隔slider.setTickInterval(5)# 10.设置滑块刻度的标记位置slider.setTickPosition(QSlider.TickPosition.TicksBelow)# 11.获取滑块的最小值,最大值和当前值print(slider.minimum(), slider.maximum(), slider.value())# 12.信号与槽的绑定slider.actionTriggered.connect(self.actionTriggered)slider.sliderMoved.connect(self.sliderMoved)slider.sliderPressed.connect(self.sliderPressed)slider.sliderReleased.connect(self.sliderReleased)slider.valueChanged.connect(self.valueChanged)def actionTriggered(self, action):print("滑块被拖动了,当前改变方式的索引为:", action)def sliderMoved(self, value):print("滑块被移动了,被移动到", value)def sliderPressed(self):print("滑块被按下了")def sliderReleased(self):print("滑块被释放了")def valueChanged(self, value):print("滑块的值被改变了,改变后的值", value)if __name__ == "__main__":# 1.创建一个QApplication类的实例app = QApplication(sys.argv)# 2.创建一个窗口window = MyWidget()# 3.展示窗口window.show()# 4.进入程序的主循环并通过exit()函数确保主循环安全结束sys.exit(app.exec())
三、滚动条控件
PySide6 中提供了两个滚动条控件,分别是水平滚动条(HorizontalScrollBar)和垂直滚动条(VericalScrollBar),但两个滚动条控件对应的类都是 QScrollBar
类,这两个控件通过水平或者垂直的滚动条可以扩大当前窗口的有效装载面积,从而装在更多的控件。
用 QScrollBar 类创建实例对象的方法如下:
QScrollBar(parent:QWidget=Noone)
QScrollBar(orientation:Qt.Orientation, parent:QWidget=Noone)
其中,parent 是 窗口 或者 容器 类控件,Qt.Orientation 可以取 Qt.Orientation.Horizontal 和 Qt.Orientation.Vertical,表示水平和竖直。
import sysfrom PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QScrollBar
from PySide6.QtCore import Qtclass MyWidget(QWidget):def __init__(self):# 1.调用父类Qwidget类的__init__()方法super().__init__()# 2.调用setupUi()方法初始化页面self.setup_ui()def setup_ui(self):# 1.设置窗口对象大小self.resize(700, 500)# 2.创建滚动条控件scrollBar = QScrollBar(Qt.Orientation.Vertical, self)scrollBar.setFixedSize(10, 300)# 3.设置滚动条的范围scrollBar.setRange(0, 100)# 4.设置滚动条的值scrollBar.setValue(70)# 5.获取滚动条的值print(scrollBar.value())if __name__ == "__main__":# 1.创建一个QApplication类的实例app = QApplication(sys.argv)# 2.创建一个窗口window = MyWidget()# 3.展示窗口window.show()# 4.进入程序的主循环并通过exit()函数确保主循环安全结束sys.exit(app.exec())
四、旋钮控件
旋钮控件(QDail)本质上类似于一个滑块控件,只是显示的样式不同。
用 QDail 类创建实例对象的方法如下:
QDail(parent:QWidget=Noone)
其中,parent 是 窗口 或者 容器 类控件。
QDail 类的特有方法及其说明如下:
# 实例方法
notchesVisible() -> bool # 获取刻度是否可见
setNotchTarget(target:float) -> None # 设置刻度之间的距离
notchTarget() -> float # 获取刻度之间的距离
wrapping() -> bool # 获取最大值和最小值刻度是否重合
notchSize() -> float # 获取相邻刻度之间的值# 槽函数
setNotchesVisible(visible:bool) -> None # 设置刻度是否可见
setWrapping(on:bool) -> None # 设置最大值和最小值刻度是否重合
import sysfrom PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QDialclass MyWidget(QWidget):def __init__(self):# 1.调用父类Qwidget类的__init__()方法super().__init__()# 2.调用setupUi()方法初始化页面self.setup_ui()def setup_ui(self):# 1.设置窗口对象大小self.resize(700, 500)# 2.创建旋钮控件dial = QDial(self)dial.setFixedSize(100, 100)# 3.设置旋钮范围dial.setRange(0, 100)# 4.设置是否显示刻度dial.setNotchesVisible(True)# 5.设置刻度的最小值和最大值是否重合dial.setWrapping(True)# 6.信号与槽的绑定dial.sliderMoved.connect(self.sliderMoved)dial.sliderPressed.connect(self.sliderPressed)dial.sliderReleased.connect(self.sliderReleased)dial.valueChanged.connect(self.valueChanged)def sliderMoved(self, value):print("滑块被移动了,被移动到", value)def sliderPressed(self):print("滑块被按下了")def sliderReleased(self):print("滑块被释放了")def valueChanged(self, value):print("滑块的值被改变了,改变后的值", value)if __name__ == "__main__":# 1.创建一个QApplication类的实例app = QApplication(sys.argv)# 2.创建一个窗口window = MyWidget()# 3.展示窗口window.show()# 4.进入程序的主循环并通过exit()函数确保主循环安全结束sys.exit(app.exec())