博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GUI学习之二十一——QSlider、QScroll、QDial学习总结
阅读量:4324 次
发布时间:2019-06-06

本文共 3738 字,大约阅读时间需要 12 分钟。

上一章我们学习了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 QtGuiimport 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())/2        y = (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()) / 2        y = (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)        passif __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

你可能感兴趣的文章
图论知识,博客
查看>>
[原创]一篇无关技术的小日记(仅作暂存)
查看>>
20145303刘俊谦 Exp7 网络欺诈技术防范
查看>>
原生和jQuery的ajax用法
查看>>
iOS开发播放文本
查看>>
20145202马超《java》实验5
查看>>
JQuery 事件
查看>>
main(argc,argv[])
查看>>
在线教育工具—白板系统的迭代1——bug监控排查
查看>>
121. Best Time to Buy and Sell Stock
查看>>
hdu 1005 根据递推公式构造矩阵 ( 矩阵快速幂)
查看>>
安装php扩展
查看>>
百度移动搜索主要有如下几类结果构成
查看>>
Python爬虫面试题170道:2019版【1】
查看>>
JavaBean规范
查看>>
第四阶段 15_Linux tomcat安装与配置
查看>>
NAS 创建大文件
查看>>
学习笔记-模块之xml文件处理
查看>>
接口测试用例
查看>>
面试:用 Java 实现一个 Singleton 模式
查看>>