wxPython / wxWidgetsのフレームのシステムメニューにメニュー項目を追加するにはどうすればよいですか?
(私は、Windowsのアプリケーションアイコンをクリックしたときに表示されるメニューについて話しています-最小化、最大化、閉じるなどのメニュー)。
本格的なトップメニューを必要としないシンプルなアプリケーションのために、独自のメニュー項目を追加したいと思います。
Windowsのみのソリューションが存在する場合(そして十分に単純な場合)も役立ちます。
wxWidgets/wxPython ではシステム メニューを操作できないと思いますが、いくつかの例外があり、必要なものには十分ではありません。
スタイル フラグを wx.Frame に渡すことで、システム メニューを削除できます。style=wx.DEFAULT_FRAME_STYLE & ~wx.SYSTEM_MENU
Mac OS X では、wx.ID_EXIT
やなどの ID を持つメニュー項目wx.ID_HELP
がアプリケーション メニューに移動されます。
イベントをバインドしようとしましたwx.EVT_MENU_OPEN
が、イベント ハンドラーが呼び出されますが、渡されたイベントには Windows で役立つものが含まれていません。以下のコードは、Frame のシステム メニューを開いたときに「None 0」を出力します。
import wx
class Frame(wx.Frame):
def __init__(self, *args, **kwargs):
super(Frame, self).__init__(*args, **kwargs)
self.Bind(wx.EVT_MENU_OPEN, self.onMenuOpen)
def onMenuOpen(self, event):
print event.GetMenu(), event.GetMenuId()
event.Skip()
app = wx.App(0)
frame = Frame(None)
frame.Show()
app.MainLoop()