菜单分隔符不显示

Menu Separator Does Not Show

在为 MacOS 上的 PYQT5 构建应用程序菜单栏时,我模拟了 PYQT5 back-end 不会自动创建的系统菜单,并尝试修复它创建的不完整的菜单。例如,当创建标题为 &View 的 QMenu 小部件时,back-end 将自动生成一个“进入全屏”菜单选项(并且非常有助于管理全屏操作)。但是,后端不会在automatically-generated“进入全屏”项之前显示分隔符。在 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)

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

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)