GUI学习之五——QPushbutton类学习笔记
QPushButton是QAbstractButton类下使用最多的子类,它的用法在上一章中基本讲完了,这里还总结了几个别的用法。
一.创建按钮
我们在前面所有的案例中创建按钮都是用这样的方式
window = QWidget()
btn = QPushButton(window)
btn.setText('按钮')
还有两种方式可以用
window = QWidget()
btn = QPushButton('按钮',window)
或者带图标的按钮
btn = QPushButton(icon=icon,'按钮',window)
这样就简化了按钮的创建过程。
二.菜单功能
可以用按钮结合QMenu()来对菜单进行创建。
menu = QMenu() #创建目录
menu.addMenu() #目录添加子目录
menu.addSeparator() #添加分割线
menu.setTitle() #设置目录标题
menu.setIcon() #设置目录图标
action = QAction() #创建行为
action.setIcon() #设置行为图标
action.setText() #设置行为文本
menu.addAction() #向目录添加行为
我们可以利用上面的API来设置一个下面样式的菜单栏按钮

并且点击新建、打开时候会打印'新建','打开'。
from PyQt5.Qt import *
import sys
app=QApplication(sys.argv)
window = QWidget()
btn =QPushButton('菜单',window) menu = QMenu() action_new = QAction()
action_new.setText('新建')
action_new.triggered.connect(lambda :print('新建'))
action_open = QAction()
action_open.setText('打开')
action_open.triggered.connect(lambda :print('打开'))
action_close = QAction('关闭') sub_menu = QMenu()
sub_menu.setTitle('最近打开') menu.addAction(action_new)
menu.addAction(action_open)
menu.addMenu(sub_menu)
menu.addSeparator()
menu.addAction(action_close)
btn.setMenu(menu) window.show()
sys.exit(app.exec_())
菜单案例
要注意的是这个QMenu是继承了QWidget类的,是可以独立显示的。
这里还有一个基于QMenu的用法:右键菜单
先了解右键触发菜单的事件
class MyWindow(QWidget):
def contextMenuEvent(self, a0: QtGui.QContextMenuEvent):
print('展示菜单')
重新写窗口的类,并继承QWidget,父类里有个contextMenuEvent这个右键菜单事件。
Qt.GtGui.QContextMenuEvent里包含了右键点击的全局坐标和窗口内的局部坐标
QtGui.QContextMenuEvent.globalPos() #全局坐标
QtGui.QContextMenuEvent.pos() #相对坐标
结合上面的菜单案例,可以做一个右键菜单的案例
from PyQt5.Qt import *
from PyQt5 import QtGui
import sys
app=QApplication(sys.argv)
class MyWindow(QWidget):
def contextMenuEvent(self, a0: QtGui.QContextMenuEvent):
menu = QMenu(self) action_new = QAction()
action_new.setText('新建')
action_new.triggered.connect(lambda: print('新建'))
action_open = QAction()
action_open.setText('打开')
action_open.triggered.connect(lambda: print('打开'))
action_close = QAction('关闭') sub_menu = QMenu()
sub_menu.setTitle('最近打开') menu.addAction(action_new)
menu.addAction(action_open)
menu.addMenu(sub_menu)
menu.addSeparator()
menu.addAction(action_close) menu.exec_(a0.globalPos()) #展示菜单 window = MyWindow() window.show()
sys.exit(app.exec_())
右键菜单案例
这是常规的右键触发菜单的方式,还有一种方法可以用
from PyQt5.Qt import *
import sys
app=QApplication(sys.argv)
class MyWindow(QWidget):
pass def menu(point):
menu = QMenu(window) action_new = QAction()
action_new.setText('新建')
action_new.triggered.connect(lambda: print('新建'))
action_open = QAction()
action_open.setText('打开')
action_open.triggered.connect(lambda: print('打开'))
action_close = QAction('关闭') sub_menu = QMenu()
sub_menu.setTitle('最近打开') menu.addAction(action_new)
menu.addAction(action_open)
menu.addMenu(sub_menu)
menu.addSeparator()
menu.addAction(action_close) dest_point = window.mapToGlobal(point) #把相对坐标映射到桌面的全局坐标
menu.exec_(dest_point) window = MyWindow()
window.setContextMenuPolicy(Qt.CustomContextMenu) #右键菜单策略
window.customContextMenuRequested.connect(menu) #customContextMenuRequested会发送鼠标点击的相对坐标 window.show()
sys.exit(app.exec_())
右键调用菜单——方式2
这种方式用的是发射信号的方式调用相对应的槽函数
三.按钮扁平化
通过下面的代码可以对按钮进行扁平化的设置
btn.setFlat(True) #设置按钮扁平化
btn.isFlat() #获取按钮是否扁平化
扁平化的设置后是这样的

注意看按钮2相对于按钮1的状态,按钮1是正常的,2是扁平化的。
对扁平化后的按钮控件无法通过setStyleSheet()改变视觉效果。
四.按钮的默认处理
有些时候按钮是默认被选中的,就像这种时候

被蓝框框住的按钮就是默认选中的按钮。可以通过下面的代码进行设定
btn.setDefault(True) #开始时就是默认选中按钮
btn.setAutoDefault(True)#被点击时变为默认选中按钮
btn.isDefault() #获取是否是默认选中按钮
五.QCommandLinkButton类的使用
QCommandLinkButton是QPushButton的一个子类,有着下面的几个特点
1.类似单选按钮的用途,但常常用于在一组互斥选项中(安装程序是的上一步、下一步)
2.外观类似扁平化的按钮,但是除了普通的按钮文本外还有描述性文本。
3.由于上面所述的特性,命令链接按钮一般用于向导对话框中。
btn1 = QCommandLinkButton('上一步',window)
btn2 = QCommandLinkButton('下一步',window)
btn2.move(300,0)
btn2.setDescription('这个按钮的描述文本')
btn3 = QCommandLinkButton('按钮标题','描述文本',window) #简化的定义方式
出来的效果就是这样的(btn3就不定义了)。

注意btn2,在常规文本下们还存在了另外的描述文本。
由于继承了QPushButton这个父类,它包含所有QAbstractButton类及QPushButton类所有的API。
GUI学习之五——QPushbutton类学习笔记的更多相关文章
- GUI学习之五——QAbstractButton类学习笔记
今天总结一下AbstractButton类的学习笔记. 一.描述 AbstractButton是对各种按键的抽象类他的继承关系是这样的 首先,QAbstractButton继承了QWidget类的各种 ...
- 设计模式学习起点 UML类图笔记
UML类图笔记 大学开设的软件设计课程一般都会学习UML类图,大部分关于设计模式的描述都是使用的UML类图,可以说类图的表示是学习设计模式的起点.UML定义类之间的关系主要有六种:泛化关系.实现关系. ...
- Java_lambda表达式之"stream流学习,Map学习,collect学习,Conllectors工具类学习"
Lambda表达式学习 对List<Integer> userIdList = UserList.stream().map(User::getUserId).collect(Collect ...
- php优秀框架codeigniter学习系列——CI_Lang类学习
这篇文章主要介绍CI核心框架工具类CI_Lang. 根据CI文档自己的定义,该类用来: 提供相关的函数,用于检索语言文件和文本行,以便国际化. 以下选取类中的重点方法进行说明. __construct ...
- php优秀框架codeigniter学习系列——CI_Input类学习
这篇文章主要介绍CI核心框架工具类CI_Input. 根据CI文档自己的定义,该类用来: 提前处理全局变量,以保证安全; 提供一些帮助函数用来处理输入数据. 以下选取类中的重点方法进行说明. __co ...
- php优秀框架codeigniter学习系列——CI_Security类学习
这篇文章主要介绍CI核心框架工具类CI_Security. 安全类包含了一些方法,用于安全的处理输入数据,帮助你创建一个安全的应用.以下选取类中的重点方法进行说明. __construct() 在构造 ...
- php优秀框架codeigniter学习系列——CI_Router类学习
这篇文章主要介绍CI核心框架工具类CI_Router. 如果说CI_URI类是用来解析URI,那么CI_Router类就应该是根据解析出来的URI来决定究竟访问哪一个文件和哪一个function. 详 ...
- php优秀框架codeigniter学习系列——CI_URI类学习
这篇文章主要介绍CI核心框架工具类CI_URI. 该类主要用来解析uri和决定路由的.关于URI和URL的关系请参考这位朋友的文章.简单来说URI是唯一定位的资源,URL是唯一资源的一个网络可能访问路 ...
- Java学习:Properties类
Java学习:Properties类 学习目标 认识properties文件,理解其含义,会正确创建properties文件. 会使用java.util.Properties类来操作propertie ...
随机推荐
- html页面嵌套两个iframe页面导致第二个iframe页面高度失效的问题
1:这是因为最里面嵌套的iframe页面html和body高度无法设置问题,我的解决办法是js去控制iframe高度 2:js获取最子页面(content内容区域)的高度 var ifremHeigh ...
- Hadoop2.0环境安装
0. Hadoop源码包下载 http://mirror.bit.edu.cn/apache/hadoop/common 1. 集群环境 操作系统 CentOS7 集群规划 Master 192.16 ...
- python大法好——mysql防注入
MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入 ...
- 如何系统的学习Java
初学者记住一点,学习Java一定是连续性的且循序渐进的“系统化”学习,首先我给你提供一个优秀Java工程师的学习路线. web前端方面:html.css,Java.jQuery.xml解析.Boots ...
- 常用的web服务器软件整理(win+linux)
(1)Apache Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上.Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器 ...
- Post返回json中文乱码
来源:http://blog.csdn.net/xiaoxuonl/article/details/54315612 服务器返回的是utf-8,jsp页面上也是utf-8,数据库也是utf-8怎么就是 ...
- .net WCF简单练习
之前一直没接触过WCF这个东西,由于是初学WCF没有深入研究其原理,只是写了一个demo WCF服务用于两个不同项目中的调用,在这里我举例项目A调用WCF服务实现查询数据功能. 第一步:创建数据库,有 ...
- Vue-Router导航守卫:
有的时候,我们需要通过路由来进行一些操作,比如最常见的登录权限验证,当用户满足条件时,才让其进入导航,否则就取消跳转,并跳到登录页面让其登录. 为此我们有很多种方法可以植入路由的导航过程:全局的, 单 ...
- 小组团队项目的NABCD分析
N:1.学校中有很多学生是外省的,然后不知道附近有什么地方周末可以去玩,有时候想记录自己每天发生的乐趣事情并且想跟别人分享.2.学校中学生有很多用不到的东西但是联系不到合适的买家.A:我们可以做一个软 ...
- shell 启动和停止脚本
启动脚本 start_kmeans_v3.sh #!/bin/bash #用于kmeans_data_v3_hadle启动 ps -ef | grep kmeans_data_v3_hadle.py ...