2012-05-09 18 views
1

子供がいないメニューバーの項目のクリックをキャプチャする方法はありませんか?wxトップレベルのメニューバーイベント(Python)

I.e.メニュー構造で

  • ファイル
    • 保存
    • は私が保存したり、終了した項目をクリックするためにイベントをキャプチャすることができていますが、どのようにわからないよ
  • スパム

を終了します私はスパムをクリックしてイベントをキャプチャできます

答えて

0

@uhzソリューションはほとんど動作しますが、私はそれをお勧めしません。クリック可能なトップレベルメニュー項目が許可されていない理由がなければなりません。私の環境(Debian、wx 2.8)の下では、彼のソリューションは、アイテムをホバリングすることによってイベントをトリガするような、奇妙な動作を起こします。
あなたはusecaseツールバーのほうがいいです、私はここで使うことをお勧めします。もう一度、よく慣れていない場合は、examples at zetcode(セクションツールバー)の外観を提案することができます。

0

私はファイルとスパムがトップメニュー項目であると理解しています。 Windowsでは、たとえば、wx.EVT_MENU_OPENおよびフィルタイベントを使用して試みることができる:

import wx 
from wx.lib.mixins.inspection import InspectionMixin 

class MyFrame(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title)   
     menuBar = wx.MenuBar()   
     fileMenu = wx.Menu() 
     fileMenu.Append(wx.ID_ANY, "Save") 
     fileMenu.Append(wx.ID_ANY, "Quit") 
     menuBar.Append(fileMenu, "File") 
     self.__spamMenu = wx.Menu() 
     menuBar.Append(self.__spamMenu, "Spam") 
     self.SetMenuBar(menuBar) 
     self.Bind(wx.EVT_MENU_OPEN, self.__onSpamOpen) 

    def __onSpamOpen(self, event): 
     if event.GetMenu() != self.__spamMenu: 
      return event.Skip() 
     print "Spam clicked" 

class MyMenuApp(wx.App, InspectionMixin): 
    def OnInit(self): 
     self.Init() 
     frame = MyFrame(None, wx.ID_ANY, 'Frame Window Demo') 
     frame.Show(True) 
     self.SetTopWindow(frame) 
     return True 

if __name__ == "__main__": 
    app = MyMenuApp(0) 
    app.MainLoop() 

これは、Python 2.6とwxPythonをで動作2.9.3.1

+0

回避策を試してみるといいですが、これはうまくいかない方法です。なぜこのソリューションが実際にうまく機能していないのか、私の答えを見てください。環境を使用して異なる動作に遭遇しましたか? – phineas

+0

Windowsでそれは完全に正しく動作します – uhz

+0

私はこれを最初に試しました。 – Hugoagogo

関連する問題