PyQt5 基本语法(二)
作者:互联网
- 1、按钮控件
按照继承关系来学习
1、按钮控件
1.1 QAbstractButton
1.1.1 简介
1.1.1.1 描述
- 所有按钮控件的基类
- 提供按钮的通用功能
- 其继承自 QWidget
- 其为 C++ 中的虚继承类,无法实例化对象,只有子类化,才能实例化对象
1.1.1.2 自定义按钮
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
class Btn(QAbstractButton):
# 子类化,使得可以实例化对象,同时要重写paintEvent函数
def paintEvent(self, evt):
# 这个可以自定义一个按钮
# print("绘制按钮")
# 创建一个画家,self 是纸张
painter = QPainter(self)
# 实例化一支笔
pen = QPen(QColor(0, 0, 0), 6) # 颜色,和画笔大小
# 给画家一支笔
painter.setPen(pen)
# 画画
painter.drawText(20, 20, self.text()) # 将字写在按钮上面
painter.drawEllipse(0, 0, 100, 100) # 画一个椭圆
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = Btn(w)
btn.setText("QAbstractButton")
btn.pressed.connect(lambda: print("自定义按钮被按下了"))
w.setVisible(True) # 设置为可见
sys.exit(app.exec_())
1.1.2 提示文本
案例,创建一个按钮,初始文本为1
要求:
- 每点击一次,则让文本数字加1
涉及知识点:
- 按钮控件的创建
- 按钮文本的设置和获取
- 按钮点击信号的监听
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("1") # 设置初始文本
def btn_():
count = int(btn.text())
count += 1 # 加一功能
btn.setText(str(count))
btn.pressed.connect(btn_) # 监听事件
w.setVisible(True) # 设置为可见
sys.exit(app.exec_())
1.1.3 图标相关
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
setIcon(QIcon) # 设置图标
setIconSize(ASize) # 设置图标大小
icon() # 获取图标
iconSize() # 获取图标大小
"""
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("Button") # 设置初始文本
icon = QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg") # 设置图片
btn.setIcon(icon) # 设置图标
size = QSize(20, 20) # 输入图标大小
btn.setIconSize(size) # 设置图标大小
w.setVisible(True) # 设置为可见
sys.exit(app.exec_())
1.1.4 设置快捷键
作用:
- 通过指定的快捷键,触发按钮的点击
方式:
- 有提示文本:如果提示文本包含 & 符号,则QAbstractButton会自动创建快捷键
- 无提示文本:
setShortcut("Alt + G")
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.clicked.connect(lambda: print("按钮被按下"))
# btn.setText("a&bc") # 有文本创建,快捷键为 Alt + b
btn.setText("点我")
btn.setShortcut("Alt+G") # 无文本的创建方法
w.show()
sys.exit(app.exec_())
1.1.5 按钮自动重复
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
# 当一直摁下不松开触发重复
setAutoRepeat(bool) # 设置自动重复
setAutoRepeatInterval(ms) # 设置自动重复检测间隔
setAutoRepeatDelay(ms) # 设置初次检测延迟
autoRepeat() # 获取是否自动重复
autoRepeatInterval() # 获取自动重复检测间隔
autoRepeatDelay() # 获取初次检测延迟时长
"""
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("点我")
btn.clicked.connect(lambda: print("点击一次"))
btn.setAutoRepeat(True) # 开启重复
btn.setAutoRepeatInterval(1000) # 设置 1 秒间隔
btn.setAutoRepeatDelay(2000) # 摁下两秒后触发重复
# 获取值
print(btn.autoRepeat())
print(btn.autoRepeatInterval())
print(btn.autoRepeatDelay())
w.show()
sys.exit(app.exec_())
1.1.6 状态检测
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
isDown() # 是否按下按钮
setDown(bool) # 设置按钮是否被按下
isChecked() # 是否选中了按钮
setChecked() # 设置按钮是否被选中
isCheckable() # 按钮是否可以被选中
setCheckable(bool) # 设置按钮是否可以被选中
toggle() # 切换选中与非选中状态
# 继承与QWidget中能使用的状态
isEnabled() # 判断按钮是否能点击
setEnabled(bool) # 设置按钮是否能点击
"""
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("QPushButton")
btn.move(50, 0)
btn2 = QRadioButton(w)
btn2.setText("QRadioButton")
btn2.move(50, 50)
btn3 = QCheckBox(w)
btn3.setText("QCheckBox")
btn3.move(50, 100)
# 把三个按钮全部置为按下状态
btn.setStyleSheet("QPushButton:pressed {background-color: red;}")
btn.setDown(True)
btn2.setChecked(True)
btn3.toggle()
# 打印状态
print(btn.isCheckable())
print(btn2.isChecked())
print(btn3.isDown())
w.show()
sys.exit(app.exec_())
1.1.7 排他性
如果同时存在多个按钮,而此时所有按钮有设置了排他性,则,在同一时刻只能选中一个按钮
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
autoExclusion() # 是否有排他性,一般按钮都是 False 只有单选按钮是 True
setAutoExclusion() # 设置自动排他性
# 使用场景,设定按钮中的按钮,单选特性,范围是同一级别
"""
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
for i in range(3):
btn = QPushButton(w)
btn.setText(f"QPushButton{i}")
btn.move(i * 50, i * 50)
btn.setAutoExclusive(True) # 设置具有自动排他性
print(btn.autoExclusive()) # 查看是否有自动排他性
btn.setCheckable(True) # 使得按钮可以被选中
w.show()
sys.exit(app.exec_())
1.1.8 点击
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
click() 普通点击
animateClick() # 动画点击
"""
app = QApplication(sys.argv)
w = QWidget()
btn = QPushButton(w)
btn.setText("按钮")
btn.pressed.connect(lambda: print("点击了按钮"))
btn.click() # 模拟用户对按钮的点击
btn.animateClick(2000) # 点击按钮后,持续两秒,再松开
w.show()
sys.exit(app.exec_())
1.1.9 设置点击区域
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
# 通过方法重写来实现
class MyBtn(QPushButton):
def hitButton(self, pos):
# print(pos.x()) 返回相对于按钮左上角的坐标
# 如果点击有效,就返回 True,才会发送信号;返回False就不会发射信号
return True if pos.x() < self.width() / 2 else False # 设置成只有点击左半部分才有效
app = QApplication(sys.argv)
w = QWidget()
btn = MyBtn(w)
btn.setText("按钮")
btn.pressed.connect(lambda: print("点击了按钮"))
w.show()
sys.exit(app.exec_())
1.1.10 信号
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
pressed() # 鼠标按下
released() # 鼠标释放,鼠标在控件内松开;鼠标移出控件范围后
clicked(checked = false) # 控件按下 + 控件内释放
toggle(bool checked) # 切换信号(一般在单选框或者复选框中使用)
"""
app = QApplication(sys.argv)
w = QWidget()
btn = QPushButton(w)
btn.setText("按钮")
btn.pressed.connect(lambda: print("鼠标按下了")) # 鼠标按下
btn.released.connect(lambda: print("鼠标释放了")) # 鼠标释放
btn.clicked.connect(lambda value: print("鼠标被点击", value)) # 鼠标被点击
w.show()
sys.exit(app.exec_())
1.2 QPushButton
1.2.1 简介
用来给用户点击,来完成某种动作的控件,一般是矩形
1.2.2 创建
QPushButton() # 创建一个无父控件的按钮控件
QPushButton(parent) # 创建控件的同时,设置父控件
QPushButton(text, parent) # 创建控件的同时,设置提示文本的父控件
QPushButton(icon, text, parent) # 创建控件的同时,设置图标和提示文本
1.2.3 菜单
当鼠标点击按钮时,会展开一系列的菜单
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
setMenu(QMenu) # 设置菜单
menu() # 获取菜单
showMenu() # 显示菜单
# QMenu:
addMenu(QMenu) # 添加子菜单
addSeparator() # 添加分隔线
addAction(QAction) # 添加行为动作
# QMenu 控件设置
setTitle(str) # 设置标题
setIcon(QIcon) # 设置图标
# QAction 设置
setText(str) # 设置文本内容
setIcon(QIcon) #
triggered # 监听行为信号
"""
app = QApplication(sys.argv)
w = QWidget()
btn = QPushButton("File", w)
menu = QMenu(btn)
# 创建子菜单
open_recent = QMenu(menu)
open_recent.setTitle("最近打开") # 添加标题
# open_recent.setIcon()
act_n = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "新建", menu)
"""
相当于:
act_n = QAction()
act_n.setText("新建")
act_n.setIcon(QIcon("D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"))
act_n.setParent(menu)
"""
act_n.triggered.connect(lambda: print("正在新建文件"))
act_o = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "打开", menu)
act_o.triggered.connect(lambda: print("正在打开文件"))
act_e = QAction("退出", menu)
act_e.triggered.connect(lambda: print("正在退出应用"))
act_r = QAction("Python编程", menu)
act_r.triggered.connect(lambda: print("正在打开文件"))
# 子菜单设置
open_recent.addAction(act_r)
# 菜单设置
menu.addAction(act_n) # 添加动作
menu.addAction(act_o)
menu.addMenu(open_recent)
menu.addSeparator() # 添加分隔线
menu.addAction(act_e)
btn.setMenu(menu)
w.show()
btn.showMenu() # 展示菜单,可以独立展示
sys.exit(app.exec_())
1.2.4 边框
边框是否扁平
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
btn = QPushButton("File", w)
print(btn.isFlat()) # 查看边框是否为扁平化
btn.setFlat(True) # 设置扁平化
w.show()
sys.exit(app.exec_())
1.2.5 默认处理
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
btn1 = QPushButton("File1", w)
btn2 = QPushButton("File2", w)
btn2.move(100, 0)
btn1.setAutoDefault(True) # 设置为自动默认按钮
print(btn1.autoDefault()) # 打印是否设置自动打印
btn2.setDefault(True) # 一开始就设置为默认
w.show()
sys.exit(app.exec_())
在某些GUI样式中,默认按钮被绘制,其周围有一个额外的框架,最多三个像素或更多Qt会自动在自动默认按钮周围保留此空间。即自动默认按钮可能会有稍微大点的提示对于具有QDialog父级的按钮,此属性的默认值为True;否则默认为False
1.2.5 信号
其信号大部分是继承下来的,用法与父类类似
菜单请求信号:
customContextMenuRequested(QPoint)
:自定义上下文菜单请求信号setContextMenuPolicy(Qt.CustomContextMenu)
:设置信号Qt.DefaultContextMenu
:调用对象方法contextMenuEvent()
Qt.CustomContextMenu
:发射信号
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
class Window(QWidget):
def contextMenuEvent(self, evt):
# 如果为 Qt.DefaultContextMenu,就会运行这个函数
print("展示菜单") # 右击窗口,会调用这个方法,只要在里面创建菜单就可以了
# 创建对象
menu = QMenu(self)
menu_s = QMenu("最近打开", menu)
# 创建动作
act_n = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "新建", menu)
act_n.triggered.connect(lambda: print("正在新建文件"))
act_o = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "打开", menu)
act_o.triggered.connect(lambda: print("正在打开文件"))
act_e = QAction("退出", menu)
act_e.triggered.connect(lambda: print("正在退出应用"))
act_r = QAction("Python编程", menu)
act_r.triggered.connect(lambda: print("正在打开文件"))
# 添加动作
menu.addAction(act_n)
menu.addAction(act_o)
menu.addAction(act_e)
menu.addAction(act_r)
menu.addMenu(menu_s)
# 展示菜单
menu.exec_(evt.globalPos()) # 在鼠标右键的位置打开菜单,参数是窗口坐标
app = QApplication(sys.argv)
w = Window()
w.resize(500, 500)
# Qt.CustomContextMenu,就会发送信号调用此函数
def show_menu(point):
print("展示菜单", point)
# 创建对象
menu = QMenu(w)
menu_s = QMenu("最近打开", menu)
# 创建动作
act_n = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "新建", menu)
act_n.triggered.connect(lambda: print("正在新建文件"))
act_o = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "打开", menu)
act_o.triggered.connect(lambda: print("正在打开文件"))
act_e = QAction("退出", menu)
act_e.triggered.connect(lambda: print("正在退出应用"))
act_r = QAction("Python编程", menu)
act_r.triggered.connect(lambda: print("正在打开文件"))
# 添加动作
menu.addAction(act_n)
menu.addAction(act_o)
menu.addAction(act_e)
menu.addAction(act_r)
menu.addMenu(menu_s)
# 展示菜单
dest_point = w.mapToGlobal(point) # 将坐标转换为全局的坐标
menu.exec_(dest_point) # 在鼠标右键的位置打开菜单,参数是窗口坐标
# w.setContextMenuPolicy(Qt.DefaultContextMenu) # 这个会运行重写的方法
w.setContextMenuPolicy(Qt.CustomContextMenu) # 其不会运行重写的方法,但是会有信号传输
w.customContextMenuRequested.connect(show_menu) # 监测信号
w.show()
sys.exit(app.exec_())
1.3 QCommandLinkButton
1.3.1 描述
命令链接是 window vista 引入的新控件
它的用途类似于单选按钮的用途,因为它用于在一组互斥选项之间的选择
命令链接按钮不应单独使用,而应作为向导和对话框中单选按钮的替代选项
外观通常类似于平面按钮的外观,但除了普通按钮文本之外,它还允许描述性文字
继承自QPushButton
1.3.2 语法
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QCommandLinkButton("标题", "描述", w)
btn.setText("标题文本内容") # 设置标题
print(btn.text()) # 获得标题
btn.setDescription("设置描述内容") # 设置描述
print(btn.description()) # 获得描述
btn.setIcon(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg")) # 设置图标
w.show()
sys.exit(app.exec_())
1.4 RadioButton
1.4.1 描述
一般用于给用户提供若干个选项中的单选操作,当选中一个时,会自动取消上一个
当按钮选中时,会有一个圆圈图标,用于标识用户的选中状态
继承自QAbstractButton
1.4.2 功能作用
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
# 创建,在同一个组或同一个父对象内,值能选择一个,但是如果有r_btn1.setAutoExclusive(False)其可以选择多个(没有排他性)
r_btn1 = QRadioButton("男&male", w) # 使用 & 设置快捷键 Alt + m
r_btn1.move(100, 0)
r_btn1.setChecked(True) # 自动选中
r_btn2 = QRadioButton("女female", w)
r_btn2.setShortcut("Alt+F") # 无文本创建快捷键
w.show()
sys.exit(app.exec_())
几乎父类的所有方法,子类都可以调用
1.4.3 信号
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
r_btn1 = QRadioButton("男", w)
r_btn1.move(100, 0)
r_btn1.setChecked(True)
r_btn2 = QRadioButton("女", w)
r_btn2.toggled.connect(lambda isChecked: print(isChecked)) # 返回bool,可以得到按钮是否被选中
w.show()
sys.exit(app.exec_())
父类的所有信号,子类都可以使用
1.4.4 多组排斥
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
r_btn1 = QRadioButton("男", w)
r_btn1.move(100, 0)
r_btn2 = QRadioButton("女", w)
# 两组
r_btn3 = QRadioButton("yes", w)
r_btn3.move(100, 40)
r_btn4 = QRadioButton("no", w)
r_btn4.move(0, 40)
# 解决方法1:继承不一样的父对象
# 解决方法2:使用按钮组 QButtonGroup
g1 = QButtonGroup(w) # 创建
g1.addButton(r_btn1) # 添加按钮
g1.addButton(r_btn2) # 添加按钮
g1.addButton(r_btn3) # 添加按钮
g1.removeButton(r_btn3) # 移除按钮
g2 = QButtonGroup(w) # 创建
g2.addButton(r_btn3) # 添加按钮
g2.addButton(r_btn4) # 添加按钮
w.show()
sys.exit(app.exec_())
QButtonGroup:
描述:
- 提供一个抽象的按钮容器,可以将多个按钮划分为一组
- 不具备可视化效果
- 一般放的都是可检查的按钮
- 继承于QObject
功能:
#!/usr/bin/env python # -*- coding: UTF-8 -*- # @author: kun from PyQt5.Qt import * import sys app = QApplication(sys.argv) w = QWidget() w.resize(500, 500) r_btn1 = QRadioButton("男", w) r_btn1.move(100, 0) r_btn2 = QRadioButton("女", w) r_btn2.setChecked(True) # id以及创建 g1 = QButtonGroup(w) # 创建 g1.addButton(r_btn1, 1) # 添加按钮,同时设置id为1,系统自动分配的id为负值 g1.addButton(r_btn2, 2) # 添加按钮,同时设置id为2 print(g1.button(1)) # 查看 id 为 1 的按钮 # 手动绑定id g1.setId(r_btn1, 2) g1.setId(r_btn2, 1) print(g1.id(r_btn1)) # 查看指定按钮的id print(g1.checkedId()) # 获取选中的按钮的id,如果都没选中,则为-1 # 按钮操作 # g1.removeButton(r_btn2) # 移除按钮 print(g1.buttons()) # 查看组内有哪些按钮 print(g1.button(1)) # 查看 id 为 1 的按钮 print(g1.checkedButton().text()) # 查看选中的按钮 # 独占设置 g1.setExclusive(False) # 取消组内的互斥关系 print(g1.exclusive()) # 获取组内是否有互斥关系 w.show() sys.exit(app.exec_())
信号使用
buttonClicked(int / QAbstractButton) # 当组内的按钮点击时,发射此信号 buttonPressed(int / QAbstractButton) # 当组内的按钮按下时,发射此信号 buttonReleased(int / QAbstractButton) # 当组内的按钮松开时,发射此信号 buttonToggled(int / QAbstractButton) # 当组内的按钮切换状态时,发射此信号 # 比如 g1.buttonToggled[int].connect(lambda val: print(val))
注意:
- 通过buttonToggle[int].connect(fn) :来获取指定响应返回类型的信号,int 为按钮的 id 值
- 如果一个对象向外界提供的信号名称一样,但参数不一样;外界在使用信号时,可以使用如下格式进行选择
signal_name[type]
1.5 QCheckButton
1.5.1 描述
一般用于给用户提供若干个选项中的多选操作,可以都选;也可以都不选
左侧会有一个方框图标,标识用户的选中状态
继承自QAbstractButton
1.5.2 功能作用
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
bc = QCheckBox("python", w) # 创建复选框对象
bc.setIcon(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg")) # 设置图标
# 其可以继承父类的操作
# 设置是否三态
bc.setTristate(True) # 开启三态
print(bc.isTristate()) # 查看是否开启三态
# 设复选框状态
bc.setCheckState(Qt.PartiallyChecked) # 部分选中
print(bc.checkState()) # 查看选中状态
w.show()
sys.exit(app.exec_())
复选框的状态:
Qt.Unchecked
:该项目未选中 0Qt.PartiallyChecked
:部分选中 1Qt.Checked
:全部选中 2
1.5.3 信号
stateChanged(int state) # 选中或清除选中时,发射此信号
其他的信号都是通过继承而来
1.6 QToolButton
1.6.1 描述
提供了一个快速访问按钮
通常是在工具栏内部使用
工具按钮通常不显示文本标签,而是显示图标,如保存文件的图标
继承自QAbstractButton
1.6.2 功能作用
1.6.2.1 创建
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QToolButton(w) # 创建一个按钮
btn.setIcon(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg")) # 添加图标
btn.setIconSize(QSize(100, 100)) # 设置图标大小
btn.setText("xxx") # 设置文本,如果有图标又有文本,那么默认显示图标
btn.setToolTip("这是一个工具栏按钮") # 设置提示
btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) # 改变按钮风格,文本显示在图标下方,其他类型的风格可以在官方文档或者源码中查看
print(btn.toolButtonStyle()) # 获得按钮风格取值
w.show()
sys.exit(app.exec_())
1.6.2.2 自动提升
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QToolButton(w)
btn.setArrowType(Qt.UpArrow) # 设置向上的箭头,其他的请到官方文档或源码中查找,在设置箭头后,以前设置的图标将被覆盖
print(btn.arrowType()) # 获取箭头类型
btn.setAutoRaise(True) # 设置自动提升,类似于setFlat()
print(btn.autoRaise()) # 获取是否开启自动提升效果
w.show()
sys.exit(app.exec_())
1.6.2.3 菜单按钮
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QToolButton(w)
btn.setArrowType(Qt.DownArrow) # 创建一个向下的箭头
btn.setText("工具栏")
btn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
menu = QMenu(btn)
sub_menu = QMenu("子菜单", menu)
# 创建动作
act = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "行为", menu)
act.triggered.connect(lambda: print("正在执行行为"))
# 设置子菜单
sub_menu.setIcon(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"))
# 设置主菜单
menu.addAction(act)
menu.addMenu(sub_menu)
btn.setMenu(menu)
# 注意,默认的菜单弹出方式为,按住按钮一会儿才会弹出菜单 QToolButton.DelayedPopup
btn.setPopupMode(QToolButton.MenuButtonPopup) # 有一个专门的指示箭头,点击箭头展示
# btn.setPopupMode(QToolButton.InstantPopup) # 点了按钮就弹出,其会影响信号的发射
print(btn.popupMode()) # 获得菜单弹出方式
w.show()
sys.exit(app.exec_())
1.6.3 信号
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QToolButton(w)
btn.setArrowType(Qt.LeftArrow)
btn.setText("工具栏")
btn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
menu = QMenu(btn)
sub_menu = QMenu("子菜单", menu)
# 创建动作
act = QAction(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"), "行为", menu)
act.triggered.connect(lambda: print("正在执行行为"))
act.setData([1, 2, 3]) # 行为可以传递数据
# 设置子菜单
sub_menu.setIcon(QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg"))
# 设置主菜单
menu.addAction(act)
menu.addMenu(sub_menu)
btn.triggered.connect(lambda act: print("按钮发送信号", act.data())) # 单点击菜单时,也会触发这个槽,同时可以获取到哪个行为触发了这个槽,act.data() 可以接收行为设置的数据,可以对不同额行为,绑定不同的数据,在出口对数据进行操作
btn.setMenu(menu)
btn.setPopupMode(QToolButton.MenuButtonPopup)
w.show()
sys.exit(app.exec_())
标签:基本,sys,menu,act,PyQt5,语法,按钮,print,btn 来源: https://www.cnblogs.com/liuzhongkun/p/16074588.html