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_())