25.QAbstractionButton
目录
1 QAbstractionButton介绍
1.1 在Pyqt中的位置
1.2 QAbstractionButton不能直接当作展示控件调用
2 提示文本
3 图标相关
3.1 设置
3.1.1 设置图标内容 setIcon(QIcon("文件路径"))
3.1.2 设置图标大小 setIconSize(QSize(w,h))
3.2.1 获取图标内容 icon()
3.2.2 获取图标大小 iconSize()
4.1 有提示文本的
4.2 无提示文本的 setShortcut()
5 自动重复
5.1 设置
5.1.1 设置自动重复 setAutoRepeat(bool)
5.1.2 设置自动重复检测间隔 setAutoRepeatInterval(毫秒)
5.1.3 设置初次检测延迟 setAutoRepeatDealy(毫秒)
5.2 获取
5.2.1 获取是否自动重复 autoRepeat()
5.2.2 获取自动重复检测间隔 autoRepeatInterval()
5.2.3 获取初次检测延迟 autoRepeatDelay()
6 状态
6.1 设置
6.1.1 设置按钮是否处于被按下状态 setDown(bool)
6.1.2 设置按钮是否可以被选中 setCheckable(bool)
6.1.3 设置按钮是否处于被选中状态 setChecked(bool)
6.1.4 切换选中与非选中状态 toggle()
6.1.5 设置是否为可用状态 setEnabled(bool)
6.2 获取
6.2.1 是否按下按钮 isDown()
6.2.2 是否选中按钮 isChecked()
6.2.3 按钮是否可以被选中 isCheckable()
6.2.4 是否为可用状态 isEnabled()
7 排他性
7.1 获取 autoExclusive()
7.2 设置 setAutoExclusive(bool)
8 模拟点击
8.1 普通点击click()
8.2 动画点击 animateClick(毫秒)
9 有效区域设定 重写hitButton()方法
10 可用信号
10.1 鼠标按下信号 pressed()
10.2 鼠标释放 released()
10.3 控件内按下+控件内释放 clicked()
10.4 切换信号 toggled()
1 QAbstractionButton介绍
1.1 在Pyqt中的位置
- QAbstractionButton是Qweight的子类
- QAbstractionButton是QPushButton,QRadioButton,QcheckBox,QToolButton的直接父类
QAbstractionButton是QCommandLinkButton的间接父类
1.1.1 QPushButton
1.1.2 QCommandLinkButton
1.1.3 QRadioButton
1.1.4 QCheckButton
1.1.5 QToolButton
1.2 QAbstractionButton不能直接当作展示控件调用
需要定义类继承QAbstractionButton后重写绘制函数
这四步分别为:
- painter = QPainter(self) 创建一个画家
- pen = QPen(QColor(111,100,50),6) 创建一支笔,后面QColor为画笔颜色,参数为BGR三通道数值,6为画笔宽度,画笔的宽度与文字宽度无关,与用这支笔绘制的图形有关
- painter.setPen(pen) 让画家拿起这支笔
- painter.drawText(20,20,'hello') 让画家写一段字,(20,20)是文字在标签中的位置,前一个数是x,后一个数是y,hello是文字内容
绘制函数也可以在按钮外围绘制一个椭圆
此时我们画的椭圆是起始点为(0,0)点,宽为100(前面的参数),高为100(后面的参数)的矩形的内接圆,由于宽高相等绘制出来的轮廓为正圆
由于标签不够大,所以这个椭圆只能看到一部分
调整按钮大小后,我们可以看到绘制的一大部分
此时我们想从实例化中的API调整对象的文字,发现无法改变
此时我们将绘制内容自动获取
此时我们发现可以改变了
我们将这个按钮连接一个槽函数
点击按钮一次运行结果
- 注:由于QPushButton()为QAbstraction的子类,下面的案例全都使用QPushButton代替QAbstraction
2 提示文本
就是settext()和.text(),使用案例可以看demo26
3 图标相关
图标会显示在按钮上的文本左侧
3.1 设置
3.1.1 设置图标内容 setIcon(QIcon("文件路径"))
也可以这么写,效果相同
3.1.2 设置图标大小 setIconSize(QSize(w,h))
3.2 获取
3.2.1 获取图标内容 icon()
运行结果
3.2.2 获取图标大小 iconSize()
运行结果
4 设置快捷键
4.1 有提示文本的
在提示文本前加&
当第一次按下alt键的时候,提示文本的第一个字母就会出现下划线,松开之后下划线不会消失
此时我们同时按下alt+a,提示文本为ac12的按钮会变为高亮状态并触发槽函数
当我们同时按下alt+b,提示文本为bc12的按钮会变为高亮状态并触发槽函数
快捷键也可以设置在第二个字符上
同时按下alt+c可以触发槽函数
同一个按钮的快捷键通过文本设置只能设置一个
虽然按下alt键,在a和c下面都出现下划线,但是同时按下alt+c并不能触发槽函数,同时按下alt+a可以按下槽函数
说明文本设置快捷键优先提前设置的
只要是键盘上有的字符都可以设置为快捷键,数字同样可以
同时按下alt+1可以触发槽函数
4.2 无提示文本的 setShortcut()
- 注:在setShortcut()方法中不能这样设置(连接处有空格)
这样设置快捷键会失效
正常设置后,同时按下alt+a会触发文本为ac12的槽函数,同时按下alt+b会触发文本为bc12的槽函数
加上shift同样有效
再加上ctrl也同样有效
此处不将首字母大写同样有效
5 自动重复
如果用户点击按钮时,一直不松开鼠标,可以设置是否认定为连续点击,如果认为是连续点击则为自动重复
5.1 设置
5.1.1 设置自动重复 setAutoRepeat(bool)
在不松手状态下可连续触发槽函数
5.1.2 设置自动重复检测间隔 setAutoRepeatInterval(毫秒)
按下后,每1s触发一次槽函数
5.1.3 设置初次检测延迟 setAutoRepeatDealy(毫秒)
此时的初次实际上是指第一次槽函数触发结束与第二次槽函数触发之间的时候,因为当用户点击按钮时,会立即触发一次槽函数
5.2 获取
5.2.1 获取是否自动重复 autoRepeat()
5.2.2 获取自动重复检测间隔 autoRepeatInterval()
5.2.3 获取初次检测延迟 autoRepeatDelay()
6 状态
6.1 设置
我们首先在窗口中设置三种按钮
此状态是运行的初始状态
此状态是分别点击过一次的状态
当再次点击radio_btn与check_btn后,会触发他们对应的槽函数
名称分别对应每个按钮的槽函数
6.1.1 设置按钮是否处于被按下状态 setDown(bool)
True为按下状态,False为抬起状态
当设置为False时,按钮状态与默认状态相同
执行之后按钮显示为高亮状态,但此时并没有自动执行槽函数
这个功能大多应用于给用户一个暗示,比如在是否卸载时经常会点击再等等,而不是卸载
可以通过更改QSS对高亮状态显示进行修改
我们把高亮状态改为背景变红
运行后不点击任何按钮后的运行结果
按下一次按钮后恢复为普通状态
6.1.2 设置按钮是否可以被选中 setCheckable(bool)
True为能被选中状态,False为不能被选中状态
运行后在不点击的情况下与之前不同的按钮状态相同
当点击一次后,按钮QPushbutton变为高亮状态,其余两个与正常情况完全相同
再点击一次后,按钮再次回到默认状态
将参数改为False
QPushButton与正常状态下相同,QRadioButton与QCheckBox不能被选中了,但是点击后可以触发槽函数
三个按钮都点了一次的运行结果
6.1.3 设置按钮是否处于被选中状态 setChecked(bool)
由于QPushButton默认不可被选中,所以QPushButton没有效果
6.1.4 切换选中与非选中状态 toggle()
我们再搞一个切换状态的按钮
运行之后这个是我们的初始状态
点击一下切换按钮,此时变为这样
这个方法的逻辑思路是这样的,获取这个按钮的状态,然后取反,之后对结果进行设置
用这句话替代上面注释掉的那句话,经过测试效果完全相同
6.1.5 设置是否为可用状态 setEnabled(bool)
True为可用,False为不可用
- 注:此功能继承自widget
默认情况下生成的控件都是可以用的,我们将其设置为False
此时被设置的三个控件都变为灰色,且点击后无任何效果
此时点击切换状态依然有效
但切换后再对按钮进行点击依然无法触发槽函数
6.2 获取
6.2.1 是否按下按钮 isDown()
6.2.2 是否选中按钮 isChecked()
6.2.3 按钮是否可以被选中 isCheckable()
创建之后直接获取
此结果可以看出QRadioButton与QCheckBox自带可选中功能,push_btn不自带可选中功能
6.2.4 是否为可用状态 isEnabled()
7 排他性
如果同时存在多个按钮,而此时所有按钮又设置了排他性,则在同一时刻只能选中一个按钮
在PyQt中排他性是分级别的,如果他们处在同一父控件,他们只能同时选中一个,如果是不同的父控件,他们之间的排他性不受影响。
首先我们在界面中生成九个按钮
由于QPushButton默认不被选中,我们将其可选中属性设置为True
此时我们点击后可以使QPushButton保持可选中状态
7.1 获取 autoExclusive()
此时使用autoExclusive(),我们发现中间三个QRadioButton是自带排他性的
我们点击三号按钮
之后再点击四号按钮
发现3号按钮的选中状态自动被取消了
此时我们点击0号按钮,之后点击四号按钮
发现0号按钮的选中并没有取消,所以有排他性的按钮不会取消掉其他非排他性按钮的选定状态
7.2 设置 setAutoExclusive(bool)
我们讲QPushButton与QCheckBox的排他性也设置为True
我们先点击一下第0号按钮
再点击一下第3号按钮
此时发现第0号按钮的选定状态已经被取消了,说明同时具有排他性的按钮同一时间只允许有一个为被选定状态
我们也可以将QRadioButton的排他性设为True
此时QRadioButton就可以同时被选中了
8 模拟点击
这个功能在调试的过程中用的比较多,有的时候要在点击按钮的情况下执行槽函数,而此时槽函数并不好获取但按钮好获取的情况下使用
创建一个被模拟点击的按钮
再创建一个模拟点击的按钮
分别设置两个槽函数
8.1 普通点击click()
普通点击相当于点一下就将按钮松开
当我点击一次模拟按钮时的运行结果
8.2 动画点击 animateClick(毫秒)
动画点击相当于点一下,然后一直按,按够指定的毫秒时间然后松开
当我点击一次模拟按钮时的运行结果
被模拟的按钮会保持10s的按下状态,在此状态下只触发一次槽函数
9 有效区域设定 重写hitButton()方法
按钮是有尺寸的,在创建按钮的时候,默认有效区域为按钮的整个区域,我们可以对其有效区域进行设置
- 注:有效区域不会超过按钮的整体区域
在按钮中可以使用hitButton()获取在按钮上点击的点
运行后我们在按钮上点一下
运行结果
- 注:这个坐标是以按钮为参照的
此处print了两次点的位置,原因是返回值为True
如果改为False则只触发一次,且不执行槽函数
此时我们想以按钮中线为基准,将按钮的右侧设置为有效,左侧设置为无效
经测试点击左侧不可以触发槽函数而点击右侧可以触发
现在我们把按钮先搞成正方形,然后把有效区域设置成内接圆
他这个是这么算的,此时我获取了一个点,然后与圆心的点(1/2宽,1/2高)求差,求完差现在得出两个值,这两个值都平方,之后加在一起,小于1/2宽,就对了
经测试,符合要求
注:
- 1.**表示对底数进行指数操作(俗称平方,立方,n次方)
- 2.此算法不适合椭圆
平方操作也可以借助math库,案例如下
开方也可以
为了让显示更加直观,我们在按钮上绘制一个内切圆
可以通过这样的计算来搞
也可以用rect方法来搞,效果相同
此时发现上面的文字没有了,我们选择继承重写之前的方法
10 可用信号
10.1 鼠标按下信号 pressed()
按下的一瞬间即可触发信号
10.2 鼠标释放 released()
按下的时候不会触发,鼠标抬起来的时候会触发
- 注:在按下按钮后,移出按钮的有效区域会自动触发released()信号
10.3 控件内按下+控件内释放 clicked()
当鼠标按下之后抬起按钮后会触发clicked信号
- 注:如果按下后,脱离按钮有效区域,然后抬起来,不会触发clicked信号
这个clicked信号会传递一个参数,这个参数表示点击的按钮此时是否为选中状态,如果为选中状态则为True,如果不为选中状态则为Flase
我们将按钮设为可选中状态
运行之后点击一下按钮
再点击一下
- 注:上面print的这四行是点击了两次的结果
10.4 切换信号 toggled()
当按钮的选中状态发生改变时,toggled信号会被触发
运行之后我们点击一下按钮
再点击一下按钮
- 注:上面print的这两行是点击了两次的结果
当把可选中属性设为Falase,无论怎么点击按钮也不会触发toggled信号
25.QAbstractionButton相关推荐
- 第25章 Pytorch 如何高效使用GPU
第25章 Pytorch 如何高效使用GPU 深度学习涉及很多向量或多矩阵运算,如矩阵相乘.矩阵相加.矩阵-向量乘法等.深层模型的算法,如BP,Auto-Encoder,CNN等,都可以写成矩阵运算的 ...
- LeetCode简单题之有序数组中出现次数超过25%的元素
题目 给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%. 请你找到并返回这个整数 示例: 输入:arr = [1,2,2,6,6,6,6,7,10 ...
- Error:The SDK Build Tools revision (23.0.3) is too low for project ':app'. Minimum required is 25.0.
导入github上项目的时候出现 Error:The SDK Build Tools revision (23.0.3) is too low for project ':app'. Minimum ...
- 25个iptables常用示例
本文将给出25个iptables常用规则示例,这些例子为您提供了些基本的模板,您可以根据特定需求对其进行修改调整以达到期望. 格式 iptables [-t 表名] 选项 [链名] [条件] [-j ...
- 25个增强iOS应用程序性能的提示和技巧 — 中级篇
本文由破船译自:raywenderlich 转载请注明出处:BeyondVincent的博客 _____________ 在开发iOS应用程序时.让程序具有良好的性能是非常关键的.这也是用户所期望的. ...
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
PAT (Basic Level) Practise (中文)-1025. 反转链表 (25) http://www.patest.cn/contests/pat-b-practise/1025 ...
- 5.7版本mysql操做语法_mysql-5.7.25安装及常用语法
我下的是免安装版的压缩文件包,可以选择下载.msi的程序包,那样就可以通过常见的图形界面来进行安装配置了 参考链接:https://blog.csdn.net/qq_23994787/article/ ...
- java教学目标_成为Java高手的25个学习目标
1.需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EEDP)以及综合模式,应该了解UML,尤其是 class,object,interaction以及statediagrams. ...
- linux nat 端口,linux – iptables nat只是端口25?
下面的代码将完成这项工作. Iptables很容易使用 – 您只需要明确告诉它如何处理来自或到达特定端口上特定位置的流量.虽然您只请求了端口25和110,但我还包括安全SMTP和安全POP3的选项. ...
最新文章
- nginx转发及后端服务器获取真实client的IP
- 怎样用ug画铝型材_用UG画钻头,适合初学UG的小伙伴,快来学习吧!
- 英伟达再发边缘AI计算设备:仅信用卡大小,性能比TX2强15倍
- 【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )
- 蓝桥杯--算法训练 表达式计算
- dotNet Core 3.1 使用 Elasticsearch
- return另外一个用法
- 粘包拆包,Netty及远洋通信中的解决方案!超实用
- 精益软件开发(Lean Software Development)
- 解决Oracle安装过程中出现的缺少KEY_XE.reg文件的问题
- Robust performance of virtual sensing methods for active noise control 翻译
- 163个人邮箱注册申请流程,公司邮箱怎么注册?
- S@Kura的PHP进阶之路(三)
- 每个人心中都有一个Eumenides
- c语言插值法编程,Lagrange插值的C语言编程.pdf
- Node 中的 Events
- Docker学习(八):Docker可视化与监控
- shp文件的可视化与编辑
- CAN通信标准帧和扩展帧
- 漏洞之XML实体注入
热门文章
- Giga-pixel照相机诞生了
- 我如何在JavaScript中建立良好的发布过程
- 259高校毕业设计选题
- sonic云真机5 - ios设备接入总结
- TI_DSP_SRIO - DirectIO操作-LSU
- 龙争虎斗,360数科金融科技输出的强者恒强定律
- SpringBoot Druid数据库密码加密
- Linux是什么?一个老生常谈的问题
- 2级、3级...多级联动
- 《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》阅读笔记与实现