PySide6 GUI 编程(23):MenuBar 与 ToolBar搭配使用

2024-07-31 21:22:37 浏览数 (1)

带有菜单的界面

示例代码

代码语言:python代码运行次数:0复制
from typing import List

from PySide6.QtCore import QSize, Qt
from PySide6.QtGui import QAction, QIcon
from PySide6.QtWidgets import QApplication, QLabel, QMainWindow, QToolBar


class MyMenuBar(QMainWindow):
    def __init__(self, icon_paths: List[str], show_toolbar: bool = False):
        super().__init__()

        self.setWindowTitle('MenuBar Test')
        self.setIconSize(QSize(32, 32))

        self.label = QLabel('My Menu Bar Demo')
        self.label.setAlignment(Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter)
        self.setCentralWidget(self.label)
        if show_toolbar:
            self.tool_bar = QToolBar('test tool bar', self)
            self.tool_bar.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextUnderIcon)
            self.addToolBar(self.tool_bar)
        self.menu_bar = self.menuBar()
        # 在 macOS 上,菜单项通常只显示文本,不显示图标
        # 如果在其他平台(如 Windows 或 Linux)上运行相同的代码,你应该能看到菜单项旁边的图标
        # 如果需要在所有平台上都显示图标,可能需要使用自定义的菜单和工具栏,而不是使用系统的菜单栏
        # 因此 macOS 上,向 addMenu 函数里面传 QIcon 不会生效
        self.my_menu_1 = self.menu_bar.addMenu(QIcon(icon_paths[0]), 'MyMenu-1')
        self.my_menu_2 = self.menu_bar.addMenu(QIcon(icon_paths[1]), 'MyMenu-2')

        count = 0
        for icon_path in icon_paths:
            button_action = QAction(QIcon(icon_path), 'button-{}'.format(count), self)
            if show_toolbar:
                self.tool_bar.addAction(button_action)
                self.tool_bar.addSeparator()
            if count % 2 == 0:
                self.my_menu_1.addAction(button_action)
            else:
                self.my_menu_2.addAction(button_action)
            count  = 1


if __name__ == '__main__':
    icons = [
        'xxxxxx/Mountain_king_by_seashxlls.png',
        'xxxxxx/os_ubuntu_icon.png',
        'xxxxxxs/ubuntu-plain-icon.svg',
        'xxxxxx/ubuntu-wallpaper-d.png',
        'xxxxxx/warty-final-ubuntu.png',
        'xxxxxx/Ubuntu_warrior_by_jt05.png',
        'xxxxxx/MacOS_Sonoma.icns',
    ]
    app = QApplication()
    # 是否渲染工具栏
    ins = MyMenuBar(icon_paths = icons, show_toolbar = True)
    ins.show()
    app.exec()

代码逻辑分析

工具栏与菜单栏主体逻辑工具栏与菜单栏主体逻辑

菜单栏效果

不带有工具栏

菜单栏与主界面菜单栏与主界面
菜单栏按钮菜单栏按钮

带有工具栏

带有工具栏的主界面带有工具栏的主界面
菜单栏与工具栏菜单栏与工具栏

0 人点赞