python-pyqt5-工具按钮(QToolButton)添加菜单(QMenu)

QToolButton提供了比普通按钮更丰富的功能。它可以显示一个图标、一个文本或二者结合,还支持各种样式和行为,例如弹出菜单或多种动作模式

样式

setToolButtonStyle(Qt.ToolButtonStyle)              # 设置按钮样式风格
    # 参数
                Qt.ToolButtonIconOnly               # 仅显示图标
                Qt.ToolButtonTextOnly               # 仅显示文字
                Qt.ToolButtonTextBesideIcon         # 文本显示在图标旁边
                Qt.ToolButtonTextUnderIcon          # 文本显示在图标下方
                Qt.ToolButtonFollowStyle            # 遵循风格
            
toolButtonStyle()                                   # 获取按钮样式风格

箭头图标

setArrowType(Qt.ArrowType)                          # 按钮变成一个具备特殊箭头图标的按钮
    # 参数
                Qt.NoArrow                          # 无箭头
                Qt.UpArrow                          # 向上箭头
                Qt.DownArrow                        # 向下箭头
                Qt.LeftArrow                        # 向左箭头
                Qt.RightArrow                       # 向右箭头
 
arrowType()                                         # 获取设置的箭头图标样式

菜单弹出方式

setPopupMode(QToolButton.ToolButtonPopupMode)   # 设置菜单弹出方式
    # 参数
                QToolButton.DelayedPopup        # 鼠标按住一会才显示,类似于浏览器后退按钮
                QToolButton.MenuButtonPopup     # 有一个专门的指示箭头,点击箭头才显示
                QToolButton.InstantPopup        # 点了按钮就显示,点击信号不会发射

信号

triggered(QAction *action) 当点击某个action(菜单行为动作)时触发, 并会将action传递出来,点击菜单中的每一个行为动作都会触发triggered这个事件信号
pressed() 鼠标按下信号
released() 鼠标释放信号(控件内松开鼠标/鼠标移出控件范围后)
clicked(checked = False) 单击信号(控件内按下+控件内释放),传递按钮是否被选中状态
toffled(bool checked) 选中状态切换信号(一般在单选框或者复选框中使用),传递按钮是否被选中状态

QAction对象
setData(Any) # 绑定数据
data() # 获取数据

# -*- coding: utf-8 -*-
import sys

from PyQt5.Qt import *


def create_menu(parent):
    menu = QMenu("主菜单", parent)

    action_new = QAction("new", menu)
    action_new.setData("new")

    action_open = QAction("action_open", menu)
    action_open.setData("open")

    sub_menu = QMenu("export", parent)
    action_sub = QAction("to html", sub_menu)
    action_sub.setData("export to html")
    sub_menu.addAction(action_sub)

    menu.addAction(action_new)
    menu.addAction(action_open)
    menu.addMenu(sub_menu)
    menu.triggered.connect(menu_clicked)
    return menu


def create_tool_button(parent):
    tool_button = QToolButton(parent)
    tool_button.setText('文件')
    # tool_button.setIcon(QIcon('ico.PNG'))
    # tool_button.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
    # tool_button.move(250, 100)
    tool_button.setPopupMode(QToolButton.MenuButtonPopup)
    return tool_button


def menu_clicked(action: QAction):
    print(action.data())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QWidget()
    window.resize(500, 500)
    window.setWindowTitle('QToolButton-菜单')
    # 创建工具按钮
    tool_button = create_tool_button(window)
    # 创建菜单
    menu = create_menu(parent=tool_button)
    # 给工具按钮添加菜单
    tool_button.setMenu(menu)
    window.show()
    sys.exit(app.exec_())

在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值