微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

菜单分隔符不显示

如何解决菜单分隔符不显示

在 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)

View menu with no separator

解决方法

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

>
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)

View menu with separator

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。