【问题标题】:Menu Separator Does Not Show菜单分隔符不显示
【发布时间】:2021-02-26 15:30:10
【问题描述】:

在为 MacOS 上的 PYQT5 构建应用程序菜单栏时,我模拟了 PYQT5 后端不会自动创建的系统菜单,并尝试修复它不完整创建的那些。例如,当使用标题&View 创建 QMenu 小部件时,后端将自动生成“进入全屏”菜单选项(并且非常有助于管理全屏操作)。但是,后端不会在自动生成的“进入全屏”项之前显示分隔符。在sys.exit(qApp.exec_()) 之前添加分隔符的每一次尝试都被证明是徒劳的。

self.view_menu = QtWidgets.QMenu('&View', self)
self.view_menu.addAction('&Refresh Chart', self.create_plot, QtCore.Qt.CTRL + QtCore.Qt.Key_R)
self.view_menu.addAction('&Update Chart', self.file_open_update, QtCore.Qt.CTRL + QtCore.Qt.Key_U)
self.view_menu.addSeparator()  # <---- This separator is not displayed.
self.menuBar().addMenu(self.view_menu)

【问题讨论】:

    标签: python python-3.x macos pyqt5 qmenu


    【解决方案1】:

    为了让分隔符显示在系统生成的菜单项上方,需要在首次构建菜单栏时生成一个附加(临时)菜单项,并在首次显示菜单栏之前将其删除。

    self.view_menu = QtWidgets.QMenu('&View', self)
    self.view_menu.addAction('&Refresh Chart', self.create_plot, QtCore.Qt.CTRL + QtCore.Qt.Key_R)
    self.view_menu.addAction('&Update Chart', self.file_open_update, QtCore.Qt.CTRL + QtCore.Qt.Key_U)
    self.view_menu.addSeparator()
    self.__menu_temp = self.view_menu.addAction('temp')  # <---- Temporary menu item
    self.view_menu.aboutToShow.connect(self.view_menu_build)  # <---- Remove item before menu is displayed
    self.menuBar().addMenu(self.view_menu)
    
    def view_menu_build(self):
        """ Remove temporary menu item """
        self.view_menu.removeAction(self.__menu_temp)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多