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 sysfrom 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 menudef 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_buttondef 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_())