13. 滑块控件

一、抽象滑块

  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.HorizontalQt.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.HorizontalQt.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())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/862383.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.数据类型

3.1字符串1.正常字符串使用 或 "" 包裹起来2.注意转义字符 \ \ 显示’ \n 换行 \t tab \u4e2d \u### Unicode字符3.多行字符串编写 4.模板字符串5.字符串长度 str(变量名).length6.字符串的可变性,不可变String Buffer和StringBuilder都是可变的,String…

h5如何解决移动端适配问题

使用响应式布局(Responsive Layout)原理:通过CSS媒体查询(Media Queries)根据设备的屏幕尺寸、分辨率等属性来动态调整页面的布局和样式。媒体查询允许您针对不同的媒体类型(如屏幕、打印等)和条件(如屏幕宽度、高度、设备方向等)应用不同的CSS规则。 示例代码:例如,…

第15章 流与IO

第15章 流与IO 15.1 .NET 流的架构 .NET 流的架构主要包含三个概念:** 后台存储 、 装饰器 以及 流适配器 **,如图所示: C7.0 核心技术指南 第7版.pdf - p655 - C7.0 核心技术指南 第 7 版-P655-20240216192328 ​​ 其中** 后台存储 和 装饰器 **为流。后台存储流:负责处理…

超全性能调优标准制定指南,你一定不能错过!

0 前言 我有个朋友说他们国企的系统从未性能调优,功能测试完就上线,线上也没性能问题,何必还做性能调优? 本文搞清:为什么要做性能调优? 啥时开始做? 做性能调优是不是有标准?1 为啥做性能调优?有些性能问题是慢慢产生,到了时间就自爆 更多性能问题是由访问量波动导致…

第16章 网络

第16章 网络 纲要 .NET Framework 在 System.Net.*命名空间中包含了支持各种网络标准的类,支持的标准包括 HTTP、TCP/IP 以及 FTP 等。以下列出了其中的主要组件:​Webclient​ 类 支持通过 HTTP 或者 FTP 执行简单的下载/上传操作。​WebRequest​ 和 WebResponse​ 类 可以…

第13章 诊断

第13章 诊断 13.1 条件编译 预编译的指令见 4.16 预处理指令,我们这里的条件编译用到的指令有:​#if​​、#else​​、#endif​​、#elif​​ 条件编译指令可以进行 与 ​&&​ ​、 或 ​||​ ​、 非 ​!​ 运算。预定义指令可以通过三种方式定义:在文件中通…

第14章 并发与异步

第14章 并发与异步 14.2 线程 进 程提供了程序执行的独立环境, 进 程持有 线 程,且至少持有一个 线 程。这些 线 程共享 进 程提供的执行环境。 14.2.1 创建线程 创建线程的步骤为:实例化 ​Thread​ ​ 对象,通过构造函数传入 ​ThreadStart​ ​ 委托。 调用 ​Thread…

Sqlserver With as 实现循环递归

一、脚本示例declare @Separator varchar(10), @str varchar(100) declare @l int, @i int select @Separator=,,@str=111,22,777,99,666 select @i = len(@Separator), @l = len(@str); with cte7 as ( select 0 a, 1 b union all select b, charindex(@Separator, @str, b)+@…

JAVA 分布式锁

分布式锁 JVM 自带的 synchronized 及 ReentrantLock 锁都是单进程内的,不能跨进程,如下,同时来个两个请求被分配到不同的tomcat,这种锁将失效:REDIS 实现分布式锁 可以借助 REDIS 的setnx 命令实现: https://blog.csdn.net/T_Y_F_/article/details/144238022 注:redis …

java8--类Scanner--文件内容输入--windows路径分隔符转义

try { Scanner in = new Scanner(Paths.get("C:\Users\Administrator\IdeaProjects\untitled2\src\test\myfile.txt"),"UTF-8"); } catch (IOException ioException) { ioException.printStackTrace(); }ps: 1.打印当前工…

[Windows] 启动 Windows Update 服务失败,报:Windows 无法启动 Windows Update 服务(位于 本地计算机 上) 错误 126:找不到指定的模块

1 问题描述现象1:Windows 10 家庭版-服务(services.msc)-启动 Windows Update 服务失败,报:"Windows 无法启动 Windows Update 服务(位于 本地计算机 上) 错误 126:找不到指定的模块"注: C:\Windows\System32\wuaueng.dll 文件存在注:注册表regedit:计算机\HKEY_L…

共享ubuntu系统宿主机的部分文件到win虚拟机--通过ISO文件挂载

安装genisoimage sudo apt-get update sudo apt-get install genisoimage将需要共享的文件放入指定文件夹 cp /path/to/your/file ~/iso_work/使用genisoimage生成新镜像 genisoimage -o /path/to/new.iso -J -R -V "NEW_ISO_LABEL" ~/iso_work/其中new.iso就是新镜像…