5

すべてのウィンドウを閉じた後も開いたままになる wxPython アプリケーションを作成しているため、新しいファイルを OSX ドック アイコンにドラッグ アンド ドロップできます (これは で行いますmyApp.SetExitOnFrameDelete(False))。

残念ながら、すべてのウィンドウを閉じると、OSX メニューバーには「ヘルプ」メニューしか表示されません。少なくとも [ファイル] メニューの [開く] メニュー項目を追加するか、メイン ウィンドウのメニュー バーを維持したいと考えています。これはどういうわけか wxPython で可能ですか?

実際には、wxPython 以外のハック (たとえば、pyobjc でメニューを設定し、残りの GUI を wxPython で実行する) にも満足しています。とにかく、OSX での wxPython 開発はハックです ;)

更新: Lyndsey Ferguson からのヒントを使用して、この問題を解決することができました。これが私がやったことです:

  • 起動時に、すぐに表示および非表示にするウィンドウを作成します。(-10000,-10000)画面上でちらつかないように位置を設定しました(ああ、なんて汚いハックでしょう!)
  • そのウィンドウに空の EVT_CLOSE イベント ハンドラーを作成して、ウィンドウを閉じることができないようにします。
  • ウィンドウを破棄するとOSXメニューがリセットされるようですが、非表示はそうではありません...したがって、最後のウィンドウが閉じられたら、このウィンドウを再度表示および非表示にする必要があります(ユーザーがウィンドウメニューまたは Cmd-`)

ええ、これは本当に醜いです...誰かがもっときれいな解決策を思いついたら、私はとても感謝しています.

更新 2:実際には、はるかに簡単な方法で解決できます。最後のウィンドウを閉じない場合は、非表示にするだけです。また、メニュー イベントに応答しないようにします。

4

2 に答える 2

2

最近wx.MenuBar.MacSetCommonMenuBar()では、ウィンドウが開いていないときに使用するメニューバー (作成する必要があります) を設定するために使用できます。

デフォルトの macOS メニュー バーを使用するだけの場合 (アプリケーションとウィンドウ メニューが既に存在する場合)、これは最小限のコードのように見えます。

menubar = wx.MenuBar()
wx.MenuBar.MacSetCommonMenuBar(menubar)

Commandこれにより、アプリはすぐに使用できる+にも応答できるようになりQます。

wx.MenuItemIDwx.ID_ABOUTとは、これらのID を持つメニュー項目が macOS アプリケーション メニュー に移動されるため、wx.ID_EXIT特別です。ドキュメントでは、おそらく歴史的な理由から、実際にはアプリケーション メニューを「Apple」メニューと呼んでいます (たとえば、関数のドキュメントで説明されているメニューはアプリケーション メニューです)。wx.MenuBar.OSXGetAppleMenu()

于 2020-08-14T17:02:50.900 に答える
1

画面外のどこかに隠しウィンドウを作成できますか? これはハックですが、私の wxPython ベースのアプリケーションを Mac OS X で正しく動作させるには、多くのハックをしなければならなかったことを覚えています。

注: [閉じる] ボタンを無効にし、非表示のウィンドウを [ウィンドウ] メニューに表示されないように設定する必要あります。

余談ですが、Python アプリケーションの GUI 部分を除外して、Mac OS X で PyObjC を使用することを検討したことはありますか? よりネイティブな動作が得られます...

于 2010-06-02T14:19:33.433 に答える