工具栏按钮是窗口常见的区域,一般是为了能够快捷地实现一些小功能。本节详细地介绍了工具栏的用法,包括创建显示、样式设置setToolButtonStyle、箭头类型setArrowType、自动提升setAutoRaise、菜单及弹出模式setPopupMode、可用信号triggered。

什么是工具栏

工具栏,顾名思义,就是在一个软件程序中,综合各种工具,让用户方便使用的一个区域。工具栏是显示位图式按钮行的控制条,位图式按钮用来执行命令。

工具栏

QToolButton创建和显示

  • setText(str) :设置文本
  • setIcon(QIcon(str)) :设置图标
  • setIconSize(QSize(int, int)) :设置图标尺寸的大小
  • setToolTips(str) : 设置工具提示文本

默认显示图标,但是可以设置提示文本和图标,倘若同时设置文本和图标,那么仅显示图标。

这点适合QPushButton不一样的,在QPushButton中,同时设置文本和图标会两个都显示。

工具按钮的提示框

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys

# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)


# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("QToolButton的使用")  # 标题
window.resize(500, 500)                     # 窗口的大小
window.move(400, 200)                       # 窗口初次显示的位置

# 创建其他控件
tb = QToolButton(window)
tb.setText("工具1")
tb.setIcon(QIcon("飞机.png"))
tb.setIconSize(QSize(50, 50))
tb.setToolTip("工具的提示文本")

window.show()                               # 显示窗口,不然啥也没有

sys.exit(app.exec_())

工具按钮样式设置

在上面可知,同时设置文本和图标,那么仅显示图标。事实上这也是可以改的,可以对其风格取值。

  • setToolButtonStyle(Qt.ToolButtonStyle)
    • Qt.ToolButtonIconOnly ,只显示图标
    • Qt.ToolButtonTextOnly ,只显示文本
    • Qt.ToolButtonTextBesideIcon ,文本显示在图标旁边
    • Qt.ToolButtonTextUnderIcon ,文本显示在图标下边
    • Qt.ToolButtonFollowStyle ,遵循风格

可以自己单独设置体验一下效果,这里就不再演示。

箭头类型操作

箭头类型设置

  • setArrowType(Qt.ArrowType)

    • Qt.NoArrow 无箭头
    • Qt.UpArrow 向上箭头
    • Qt.DownArrow 向下箭头
    • Qt.LeftArrow 向左箭头
    • Qt.RightArrow 向右箭头
  • arrowType() 获取图标类型

需要注意的是,如果设置了箭头,图标和文本则没有了。如果设置了相关风格使其展示图标以及文本,那么这个箭头会替代图标。也就是说箭头的优先级别高于icon图标。

自动提升(扁平化)

所谓按钮的自动提升功能,本质上也是外观样式的设置。

  • setAutoRaise(bool)
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys

# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)


# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("QToolButton的使用")  # 标题
window.resize(500, 500)                     # 窗口的大小
window.move(400, 200)                       # 窗口初次显示的位置

# 创建其他控件
btn = QPushButton(window)
btn.setText("一般按钮")
btn.move(100, 100)
btn.setFlat(True)   # 一般的按钮设置扁平化

tb = QToolButton(window)
tb.setText("QToolButton")
tb.move(100, 200)
tb.setAutoRaise(True)

window.show()                               # 显示窗口,不然啥也没有

sys.exit(app.exec_())

自动提升

菜单和弹出模式

菜单在《一文详解QPushButton按钮控件_设置菜单_按钮扁平化_默认处理_自定义右击菜单_PyQt学习笔记(三十二)》一文中做过相关介绍。

具体见上文的设置菜单这一节。

  • setMenu(QMenu) :设置菜单
  • 菜单弹出模式:
    • setPopupMode(模式)
      • QToolButton.DelayedPopup:按住toolButton一定时间(超时取决于样式,请参见QStyle.SH_ToolButton_PopupDelay)后,将显示菜单;
      • QToolButton.MenuButtonPopup:在此模式下,toolButton显示一个特殊箭头,指示有弹出菜单存在。当按下toolButton上的箭头一部分时,将弹出菜单;
      • QToolButton.InstantPopup:按下toolButton时,立即显示弹出菜单。toolButton自己对应的Action不会触发
    • popupMode():获取当前的模式
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys

# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)


# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("QToolButton的使用")  # 标题
window.resize(500, 500)                     # 窗口的大小
window.move(400, 200)                       # 窗口初次显示的位置

# 创建其他控件
tb = QToolButton(window)
tb.setText("QToolButton")
tb.move(100, 200)
tb.setAutoRaise(True)

# 设置QToolButton的子菜单
menu = QMenu(tb)
sub_menu = QMenu(menu)
sub_menu.setTitle("子菜单")
sub_menu.setIcon(QIcon("飞机.png"))
action = QAction(QIcon("飞机.png"), "行为", menu)
action.triggered.connect(lambda: print("点击了这个行为菜单选项"))

menu.addMenu(sub_menu)
menu.addAction(action)

tb.setMenu(menu)

# 菜单的弹出方式
tb.setPopupMode(QToolButton.MenuButtonPopup)

window.show()                               # 显示窗口,不然啥也没有

sys.exit(app.exec_())

需要注意不同的菜单模式对信号的触发影响

可用信号

  • triggered(QAction *action)

    当点击某个action时触发,并将action传递出去

    QAction可以通过setData(Any)来绑定数据、data()获取数据

  • 继承来的

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys

# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)

# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("QToolButton的使用")  # 标题
window.resize(500, 500)  # 窗口的大小
window.move(400, 200)  # 窗口初次显示的位置

# 创建其他控件
tb = QToolButton(window)
tb.setText("QToolButton")
tb.move(100, 200)
tb.setAutoRaise(True)

# 设置QToolButton的子菜单
menu = QMenu(tb)
sub_menu = QMenu(menu)
sub_menu.setTitle("子菜单")
sub_menu.setIcon(QIcon("飞机.png"))
action1 = QAction(QIcon("飞机.png"), "行为1", menu)
action1.setData([1, 2, 3])
action2 = QAction(QIcon("飞机.png"), "行为2", menu)
action2.setData({"name": "txr"})
action1.triggered.connect(lambda: print("点击了这个行为菜单选项"))

menu.addMenu(sub_menu)
menu.addAction(action1)
menu.addAction(action2)
tb.setMenu(menu)

# 菜单的弹出方式
tb.setPopupMode(QToolButton.MenuButtonPopup)


def do_action(action):
    print("点击了行为", action.data())


tb.triggered.connect(do_action)

window.show()  # 显示窗口,不然啥也没有

sys.exit(app.exec_())

博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/QToolButton.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 08 月 05 日
如果觉得我的文章对你有用,请随意赞赏