6

簡単な 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()してメニューバーを手動で交換しようとしました。

上記のスニペットに明らかな誤りはありますか?

4

4 に答える 4

6

この質問が古いことは知っていますが、同じ問題に悩まされていたため、アプリケーションを終了するアクションを作成していたため、このアクションは OSX でアプリケーション メニューに予約されているため、ファイル メニューが表示されないことがわかりました。同じメニューで新しいアクションを作成したところ、使用可能になりました。これは、他のOSでも同じアプローチを使用して機能しました。

self.menubar = self.menuBar()

これは QMainWindow オブジェクト内で作成されました。

これが誰にも役立つことを願っています!

于 2014-02-20T23:51:55.373 に答える
3

これをテストするためにこのマシンに PyQt をインストールしていませんが、Mac ではQMainWindow.menuBar()関数がアプリケーション全体のメニュー バーを返さないと思います。

次のようなメニューバーを作成してみてください。

menubar = QtGui.MenuBar()

私はこれを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

それが役立つことを願っています!

于 2010-02-14T02:52:52.030 に答える
2

正しい。MAC OS では、次のようにメニューバーを使用する必要があります。

self.menubar = QtGui.QMenuBar() 

そして、このようではありません:

self.menubar = QtGui.QMenuBar(MainWindow) 

(MainWindowパラメータなし)

最適な解決策はQTDesiner、UI レイアウトを構築するために使用pyside-uicしてから、ツールを使用して別のプラットフォームの Python クラスに変換することです。Windows でコンパイルされた UI レイアウト クラスを MAC で使用すると、この問題が発生しました。コマンドを使用して MAC で UI レイアウト XML を再コンパイルするだけで、この問題を解決できます。pyside-uic AppMain.ui -o ui_AppMain.pyp

コンパイルされた UI レイアウト クラスを MAC と Windows で比較したところ、唯一の違いは、Max OS X ではパラメーターQMenuBarなしで新しいオブジェクトが作成されることです。MainWindow

于 2012-10-02T04:43:33.443 に答える