当前位置: 代码迷 >> python >> PyQt MenuBar Mac OSX雪豹
  详细解决方案

PyQt MenuBar Mac OSX雪豹

热度:125   发布时间:2023-07-16 10:05:15.0

我试图将一个项目添加到一个简单的PyQt示例的应用程序菜单栏中。 但是,以下代码似乎根本没有改变菜单栏。 菜单中唯一的项目是“ Python”。 下面是大部分代码,减去导入和实例化。

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(250, 150)
        self.setWindowTitle('menubar')
        self.modal = False

        exit = QtGui.QAction( QtGui.QIcon('images/app_icon.png'), 'Exit', self )
        exit.setShortcut('Ctrl+Q')
        exit.setStatusTip('Exit application')
        self.connect(exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))

        menubar = self.menuBar()
        file = menubar.addMenu('File')
        file.addAction(exit)

我也尝试过创建新的QMenuBar并使用setMenuBar()方法手动换出菜单栏。

以上代码段中是否存在明显错误?

我知道这个问题很旧,但是由于遇到同样的问题,我发现由于我正在创建一个退出应用程序的操作,并且此操作在OSX上保留给了Application菜单,因此File菜单没有出现。 当我在同一菜单上创建新动作时,该动作可用。 这通过对其他操作系统使用相同的方法来实现:

self.menubar = self.menuBar()

这是在QMainWindow对象内创建的。

希望这对任何人有帮助!

在Mac上使用PyQt时,系统会拦截某些包含单词“ Quit”或“ Exit”的命令,并将它们从菜单栏中删除,因为它们存在于其他位置。 如果菜单栏标题没有项目,则不会显示它,使其看起来好像您尚未修改菜单栏。

#exit = QtGui.QAction( 'Exit', self ) #this fails on my system
exit = QtGui.QAction( 'SomethingElse', self ) #this displays on my system
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exit)

另外,调用raise_()不会更改Mac上的菜单栏。 如果我使用raise_(),则必须手动选择窗口(通过单击其他位置然后重新单击),以获取正确的菜单栏以显示给我的pyqt应用程序。

还要记住,mac菜单栏显示在系统菜单栏中,而不是在Windows或Linux计算机上的窗口中。 正如Levi501和Swdev所建议的那样,这引出了另一种解决方案。 那就是使用出现在窗口中的非本地菜单,如下所示:

menubar = self.menuBar()
menubar.setNativeMenuBar(False)

作为大量使用Windows和Linux的人,这对我的项目来说意义更大。

我在这里找到“退出”信息: :

我没有在此计算机上安装PyQt进行测试,但我认为在Mac上, QMainWindow.menuBar()函数不会返回应用程序范围的菜单栏。

您可以尝试创建菜单栏,例如:

menubar = QtGui.MenuBar()

我将其基于QMainWindow.menuBar()函数的文档放在这里:

您也可以在此页面签出Mac OS X上标有QMenuBar的部分:

希望有帮助!

正确。 在MAC OS上,我们需要使用如下菜单栏:

self.menubar = QtGui.QMenuBar() 

而且不是这样的:

self.menubar = QtGui.QMenuBar(MainWindow) 

(不带MainWindow参数)

我建议最好的解决方案是使用QTDesiner构建UI布局,然后使用pyside-uic工具转换为不同平台上的Python类。 当我使用Windows在MAC中编译的UI布局类时,出现了此问题。 通过使用pyside-uic AppMain.ui -o ui_AppMain.pyp命令在MAC上重新编译UI布局XML即可解决此问题

在比较了MAC和Windows之间的已编译UI布局类之后,唯一的区别是在Max OS X上创建了没有MainWindow参数的新QMenuBar对象。

  相关解决方案