PyQt MenuBar Mac OSX Snow Leopard

Jer*_*rth 6 python macos pyqt menubar osx-snow-leopard

我试图将一个项添加到一个简单的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)
Run Code Online (Sandbox Code Playgroud)

我也尝试创建一个新的QMenuBar并使用该setMenuBar()方法手动交换菜单栏.

上面代码片段中的任何明显错误?

tft*_*ias 6

我知道这个问题是旧的,但因为我是坚持了同样的问题,我发现,因为我是创建操作退出应用程序,因此这个动作被保留在OSX上的应用程序菜单,文件菜单上没有出现.当我在同一菜单上创建一个新动作时,它变得可用.这适用于其他操作系统使用相同的方法:

self.menubar = self.menuBar()
Run Code Online (Sandbox Code Playgroud)

这是在QMainWindow对象中创建的.

希望这有助于任何人!


Gre*_*reg 5

在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)
Run Code Online (Sandbox Code Playgroud)

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

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

menubar = self.menuBar()
menubar.setNativeMenuBar(False)
Run Code Online (Sandbox Code Playgroud)

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

我在这里找到“退出”信息:http : //python.6.x6.nabble.com/addAction-to-menubar-td1916296.html


rya*_*n_s 3

我没有在这台机器上安装 PyQt 来测试这一点,但我认为在 Mac 上该QMainWindow.menuBar()函数不会返回应用程序范围的菜单栏。

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

menubar = QtGui.MenuBar()
Run Code Online (Sandbox Code Playgroud)

我将此基于QMainWindow.menuBar()此处函数的文档:

http://doc.qt.io/qt-4.8/qmainwindow.html#menuBar

您还可以查看本页上Mac OS X 上标有 QMenuBar 的部分:

http://doc.qt.io/qt-4.8/qmenubar.html#details

希望有帮助!

  • 另一种选择是将菜单栏放在窗口本身中 if sys.platform=="darwin": QtGui.qt_mac_set_native_menubar(False) (2认同)