PyQt5中的按钮2-QToolButton

参考

本文大部分内容来自网络
参考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)

        # 创建action并添加到菜单中, 传入三个参数:图标 text()  父对象
        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)

        # addActions时,可以传入列表
        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())
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值