参考
本文大部分内容来自网络
参考1:https://blog.csdn.net/seniorwizard/article/details/109670224
参考2:https://zhuanlan.zhihu.com/p/32407887/
QToolButton
- 继承自QAbstractButton。
- QToolButton类为命令或选项提供快速访问按钮,通常在QToolBar中使用。
- 工具按钮是一个特殊的按钮,可以快速访问特定的命令或选项。
- 工具按钮也可以使用弹出按钮。弹出菜单可以使用setMenu()来设置。使用setPopupMode()来配置菜单设置的工具按钮可用的不同模式。
参考链接:https://doc.qt.io/qt-5/qtoolbutton.html
QToolButton的常用方法
方法 | 说明 |
---|
setText() | 设置按钮的显示文本 |
setIcon() | 设置按钮上的图标 |
setEnabled() | 设置按钮是否可用,设置为False时,按钮不可用 |
text() | 返回按钮的显示文本 |
setToolButtonStyle () | 设置工具按钮样式,取值见下面的工具按钮样式表 |
setArrowType () | 设置按钮样式,取值见下面的箭头样式取值列表 |
setMenu() | 设置菜单; |
setPopupMode() | 设置菜单弹出模式,取值见下面菜单弹出模式表。 |
QToolButton按钮样式
参数 | 说明 |
---|
Qt.ToolButtonIconOnly | 只显示图标(默认风格) |
Qt.ToolButtonTextOnly | 只显示文本 |
Qt.ToolButtonTextBesideIcon | 文本显示在图标旁 |
Qt.ToolButtonTextUnderIcon | 文本显示在图标下方 |
Qt.ToolButtonFollowStyle | 遵循风格 |
QToolButton箭头样式
参数 | 说明 |
---|
Qt.NoArrow | 无箭头 |
Qt.UpArrow | 向上箭头 |
Qt.DownArrow | 向下箭头 |
Qt.LeftArrow | 向左箭头 |
Qt.RightArrow | 向右箭头 |
菜单弹出模式
参数 | 说明 |
---|
QToolButton.DelayedPopup | 延时打开 |
QToolButton.MenuButtonPopup | 添加一个箭头 |
QToolButton.InstantPopup | 立刻打开,点击不发送点击信号 |
QToolButton举例
- setToolTip():设置提示信息
- QMenu:增加menu,tb.setMenu(menu),为tb关联相关的菜单项
- 可以通过tb.triggered.connect(self.action_slot)设置整体的action的slot,传递的参数就是每一个action,当点击按钮时并不触发,而是action时触发。也可以单独设置每一个action的slot。
- 整体思路是,先设置好menu,给menu添加好sub_menu,menu设置好action,然后使用tb.setMenu(menu)将toolbutton与menu关联在一起。
import sys
from PyQt5.Qt import *
from PyQt5.QtWidgets import (QApplication, QWidget, QToolButton, QMenu,
QAction)
class ToolButton(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
tb = QToolButton(self)
tb.setText("工具")
tb.setIcon(QIcon("dog.png"))
tb.setIconSize(QSize(50, 50))
tb.setToolTip("这是一个新建的按钮")
menu = QMenu(tb)
sub_menu = QMenu(menu)
sub_menu.setTitle("子菜单1")
sub_menu.setIcon(QIcon("dog.png"))
sub_menu2 = QMenu(menu)
sub_menu2.setTitle("子菜单2")
sub_menu2.setIcon(QIcon("dog.png"))
menu.addMenu(sub_menu)
menu.addMenu(sub_menu2)
act0 = QAction(QIcon("dog.ico"), "行为_0", menu)
act1 = QAction(QIcon("dog.ico"), "行为_1", menu)
act2 = QAction(QIcon("dog.ico"), "行为_2", menu)
act3 = QAction(QIcon("dog.ico"), "行为_3", menu)
menu.addActions([act0, act1, act2, act3])
act0.setData("act0")
act1.setData("act1")
act2.setData("act2")
act3.setData("act3")
tb.setMenu(menu)
tb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
tb.setArrowType(Qt.UpArrow)
tb.setAutoRaise(True)
tb.setPopupMode(QToolButton.MenuButtonPopup)
tb.triggered.connect(self.action_slot)
"""
# 这个信号时action本身触发的
act0.triggered.connect(lambda: print("点击了行为菜单选项")) # 点击该菜单选项 触发槽函数
act1.triggered.connect(lambda: print("点击了行为菜单选项")) # 点击该菜单选项 触发槽函数
act2.triggered.connect(lambda: print("点击了行为菜单选项")) # 点击该菜单选项 触发槽函数
act2.triggered.connect(lambda: print("点击了行为菜单选项")) # 点击该菜单选项 触发槽函数
"""
"""
传入action参数的技巧: 当这个菜单添加了许多action之后, 点击不同的行为 触发不同的槽函数,
传递的参数action指的是相关的action,可以通过action, action.text(), action.data()来区分不同的action
"""
def action_slot(self, action):
print(action.text())
print(action.data())
if __name__ == '__main__':
app = QApplication(sys.argv)
window = ToolButton()
window.resize(300, 200)
window.show()
sys.exit(app.exec())