GUI学习之二十一——QSlider、QScroll、QDial学习总结
上一章我们学习了QAbstractSlider的用法,在讲功能的时候我们是借助了它的子类QSlider来实现的,今天来学习一下它的三个子类——QSlider、QScroll和QDial。
一.QSlider控件
QSlider的信号全继承自其父类,还有几个自身的功能
1.标尺位置
QSlider.setTickPosition(self, position: 'QSlider.TickPosition') #标尺设置 QSlider.tickPosition() #标尺位置获取——>int # type: 'QSlider.TickPosition' #标尺位置枚举值 NoTicks = ... # 0——无刻度 TicksAbove = ... # 1——在水平的滑块上方(竖直布局在左侧) TicksLeft = ... # 1水平上方,数值左侧 TicksBelow = ... # 2——水平下方,竖直右侧 TicksRight = ... # 2——水平下方,竖直右侧 TicksBothSides = ... # 3——两侧
2.标尺密度间隔
这个间隔是实际值的间隔,而不是像素值。比方说范围是0-100,如果间隔设为20则每20画一个标尺线。
QSlider.setTickInterval(self, ti: int) #设定标尺间隔 QSlider.tickInterval() #获取标尺间隔
3.案例
基于QSlider我们做一个案例分析,要实现下面的效果
※在滑动的过程中有标签来显示当前的值
※标签位置在滑块上并且始终随着滑块的滑动
from PyQt5.Qt import * from PyQt5 import QtGui import sysclass MySlider(QSlider):def __init__(self,parent = None,*args,**kwargs):super().__init__(parent,*args,**kwargs)self.setup_UI()def setup_UI(self):self.label = QLabel('0',self)self.label.hide()def mousePressEvent(self, ev: QtGui.QMouseEvent):super().mousePressEvent(ev) #增加功能x = (self.width()-self.label.width())/2y = (1-self.value()/(self.maximum()-self.minimum()))*(self.height()-self.label.height())self.label.move(x,y)self.label.show()self.label.setText(str(self.value()))def mouseMoveEvent(self, ev: QtGui.QMouseEvent):super().mouseMoveEvent(ev)x = (self.width() - self.label.width()) / 2y = (1 - self.value() / (self.maximum() - self.minimum())) * (self.height() - self.label.height())self.label.move(x,y)self.label.show()self.label.setText(str(self.value()))self.label.adjustSize()def mouseReleaseEvent(self, ev: QtGui.QMouseEvent):super().mouseReleaseEvent(ev)self.label.hide()class Window(QWidget):def __init__(self):super().__init__()self.UI_test()def UI_test(self):self.resize(500,300)slider = MySlider(self)label = QLabel('0',self)slider.move(50,50)pass if __name__ == '__main__':app = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())
QSlider案例
因为label要随着滑块的位置的变化而变化,所以难点就是在于对滑块位置的判定。
x的值就可以看作slider控件的中心位置,就是用slider的宽度减去label的宽度再除以2就可以了
而y的值就比较麻烦,
就是说
label.y()/self.height() = (self.maximum()-self.value())/(self.maximum()-self.minimum()
但是这样还有些差距,因为我们没有考虑到标签自身的高度,所以要修改一下
label.y()/(self.height()-label.heitht()) = (self.maximum()-self.value())/(self.maximum()-self.minimum()
简化一下就是有这么个关系
y = (1-self.value()/(self.maximum()-self.minimum()))*(self.height()-self.label.height())
二.QScrollBar控件
1.描述
QScrollBar一般很少单独使用,都是和QAbstractScrollArea一同使用来对界面进行滚动操作。它通常包括四个单独的控件:一个滑块、两个滚动箭头和页面控件
它的作用功能都是继承自QAbstractSlider的
2.创建
QScrollBar的创建分为水平滚动条和垂直滚动条,是在实例化的时候直接声明的
QScrollBar(Qt.Horizontal,self) #水平 QScrollBar(Qt.Vertical,self) #垂直
3.滚动条的长度
滚动条的长度是可以手动设置的,它有这么个关系
所以改变PageStep()的值就可以改变滚动块的大小。
三.QDial控件
QDial控件的外观和滚动块的不大一样,是一个旋钮
但是作用效果和滑块差不多,都是改变数值用的。除了继承父类的功能,它有些自己的API
1.刻度显示
QDial.setNotchesVisible(self, visible: bool) #显示刻度 QDial.notchesVisible() #获取是否显示刻度——>bool
控件的刻度分为大刻度和小刻度。一个大刻度就是一个PageStep移动的值。
注意细节,和控件接触的就是大刻度,两个大刻度之间被小刻度等分。
2.包裹
在最大值和最小值之间是有一段空白的(就像上个图里的一样),如果想要一个360°无死角都有刻度的就要用到包裹设置了
QDial.setWrapping(self, on: bool) #设置是否包裹 QDial.wrapping() #获取是否设置包裹——>bool
启用包裹后的效果就是这样了
图里所示旋钮所在位置就是0。
3.刻度间隙
QDial.setNotchTarget(self, target: float) #设置刻度之间的像素数 QDial.notchTarget() #获取刻度之间的像素数——>float
转载于:https://www.cnblogs.com/yinsedeyinse/p/10964404.html
GUI学习之二十一——QSlider、QScroll、QDial学习总结相关推荐
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0. zfill()方法语法: ...
- Mr.J-- jQuery学习笔记(二十一)--模拟微博页面
先看之前的节点操作方法:Mr.J-- jQuery学习笔记(二十)--节点操作方法 Mr.J-- jQuery学习笔记(五)--属性及属性节点 Mr.J-- jQuery学习笔记(十一)--事件委托 ...
- STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读
记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...
- activiti学习(二十一)——流程虚拟机源码分析(三)——从进入到离开userTask
前言 承接上文<activiti学习(二十)--流程虚拟机源码分析(二)--从开始节点离开到下个节点前>,假设execution接下来进入的节点是userTask,本文分析一下进入user ...
- Linux下的Samba学习(二)------用实验快速学习Samba服务器设置
前言:在windows和linux的混合网络中,samba还是有很大用处的,本文用实验的方法快速学习Samba. [实验项目] ①在linux上建立Samba服务器,用类似FTP的客户端smbclie ...
- 深度学习(二十一)——SRCNN, DRCN, VDSR
https://antkillerfarm.github.io/ 图像超分辨率算法(续) 前DL时代的SR 从信号处理的角度来说,LR之所以无法恢复成HR,主要在于丢失了图像的高频信息.(Nyquis ...
- 深度学习(二十一)基于FCN的图像语义分割-CVPR 2015-未完待续
CNN应用之基于FCN的图像语义分割 原文地址:http://blog.csdn.net/hjimce/article/details/50268555 作者:hjimce 一.相关理论 本篇 ...
- javaweb学习总结(二十一)——JavaWeb的两种开发模式
SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...
- javaweb学习总结(二十一):JavaWeb的两种开发模式
SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...
- 嵌入式Linux系统编程学习之二十一命名管道(FIFO)
文章目录 前言 一.创建.删除FIFO文件 1. 用函数创建和删除 FIFO 文件 2. 用命令创建和删除 FIFO 文件 二.打开.关闭FIFO文件 三.读写FIFO 前言 无名管道只能在有亲缘 ...
最新文章
- golang 位操作
- 科大星云诗社动态20201222
- IIS应用池保持激活工具开发
- csv文件导入导出到mysql
- 阿里云深圳数据中心正式开放
- LTE网络测试仪器和监控系统
- 如何看待快手领投知乎4.34亿美元融资?创始人周源亲自下场回答
- linux-磁盘结构
- 生成式对抗网络论文阅读整理
- C#设计模式系列:抽象工厂模式(AbstractFactory)
- React中的图片懒加载
- uikit框架_UIkit框架的口哨之旅
- Linux设备模型分析之bus(基于3.10.1内核)
- 如何制作微信春节头像,分享手机、电脑端制作头像的方法
- 使用谷歌学术检索论文小技巧
- 2022高处安装、维护、拆除考试题库模拟考试平台操作
- 干货分享:电脑无广告无弹窗的浏览器,这5款亲测干净好用
- 计算机音乐数字乐谱青芒,牵丝戏 - 青芒Qimo - 5SING中国原创音乐基地
- decltype的介绍
- 计算机等级考试17周岁能考吗,他,8岁计算机过二级,16岁被保送清华,信息类竞赛大奖拿到手软...