class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建工具栏
self.toolbar = self.addToolBar("主工具栏")
# 创建动作集合
self._create_actions()
# 设置工具栏图标尺寸
self.toolbar.setIconSize(QSize(32, 32))
def _create_actions(self):
# 新建文件动作
self.new_action = QAction(QIcon("icons/new.png"), "新建", self)
self.new_action.setShortcut("Ctrl+N")
self.new_action.setStatusTip("创建新文件")
self.new_action.triggered.connect(self.new_file)
self.toolbar.addAction(self.new_action)
# 添加分隔符 ➖
self.toolbar.addSeparator()
# 保存文件动作
self.save_action = QAction(QIcon("icons/save.png"), "保存", self)
self.save_action.setShortcut("Ctrl+S")
self.save_action.triggered.connect(self.save_file)
self.toolbar.addAction(self.save_action)
class AdvancedToolbarDemo(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建多个工具栏
self.file_toolbar = self.addToolBar("文件")
self.edit_toolbar = self.addToolBar("编辑")
# 初始化动作
self.init_actions()
# 添加工具栏控件 ️
self.add_tool_widgets()
def init_actions(self):
# 打开文件动作
self.open_action = QAction(QIcon("icons/open.png"), "打开文件", self)
self.open_action.setShortcut("Ctrl+O")
self.open_action.triggered.connect(self.open_file)
self.file_toolbar.addAction(self.open_action)
# 打印动作 ️
self.print_action = QAction(QIcon("icons/print.png"), "打印", self)
self.print_action.setEnabled(False) # 初始禁用
self.print_action.triggered.connect(self.print_document)
self.file_toolbar.addAction(self.print_action)
# 撤销/重做动作
self.undo_action = QAction(QIcon("icons/undo.png"), "撤销", self)
self.undo_action.triggered.connect(self.undo)
self.edit_toolbar.addAction(self.undo_action)
self.redo_action = QAction(QIcon("icons/redo.png"), "重做", self)
self.redo_action.triggered.connect(self.redo)
self.edit_toolbar.addAction(self.redo_action)
def add_tool_widgets(self):
# 添加组合框
self.font_combo = QFontComboBox()
self.edit_toolbar.addWidget(self.font_combo)
# 添加颜色选择按钮
self.color_btn = QToolButton()
self.color_btn.setPopupMode(QToolButton.MenuButtonPopup)
color_menu = QMenu(self)
color_menu.addAction("红色", lambda: self.set_color(Qt.red))
color_menu.addAction("蓝色", lambda: self.set_color(Qt.blue))
self.color_btn.setMenu(color_menu)
self.color_btn.setIcon(QIcon("icons/color.png"))
self.edit_toolbar.addWidget(self.color_btn)
# 添加切换按钮
self.grid_toggle = QAction(QIcon("icons/grid.png"), "显示网格", self)
self.grid_toggle.setCheckable(True)
self.grid_toggle.toggled.connect(self.toggle_grid)
self.edit_toolbar.addAction(self.grid_toggle)
action.setIcon(QIcon("path/to/icon.png"))
action.setShortcut("Ctrl+Shift+S")
action.setStatusTip("保存当前文件")
action.setEnabled(False) # 禁用按钮
action.setCheckable(True)
action.toggled.connect(handler)
def contextMenuEvent(self, event):
menu = QMenu(self)
menu.addAction(self.new_action)
menu.addAction(self.save_action)
menu.exec_(event.globalPos())
# 停靠位置设置
self.addToolBar(Qt.LeftToolBarArea, self.file_toolbar)
self.addToolBar(Qt.RightToolBarArea, self.edit_toolbar)
# 浮动控制
self.file_toolbar.setFloatable(False) # 禁止浮动
# 设置工具按钮样式
self.toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
# 自定义样式表
self.toolbar.setStyleSheet("""
QToolBar { background: #f0f0f0; }
QToolButton { padding: 5px; }
""")
图标资源
建议使用Qt资源系统(qrc文件
)管理图标,避免路径问题
快捷键冲突 ⚔️
使用QShortcut
类管理全局快捷键
工具栏灵活性
允许用户通过setMovable(True)
自定义工具栏位置
状态保存
使用QSettings
保存工具栏布局:
settings = QSettings("MyCompany", "MyApp")
settings.setValue("toolbarState", self.saveState())