wxPython中有沒有什麼方法可以在菜單欄上的某個項目上捕獲點擊,而不需要任何childeren。wx頂級菜單欄事件(python)
I.e.與菜單結構
- 文件
- 保存
- 退出
- 垃圾郵件
我能捕捉到事件點擊保存或退出項目,但我不能確定如何我可以捕獲點擊垃圾郵件的事件
wxPython中有沒有什麼方法可以在菜單欄上的某個項目上捕獲點擊,而不需要任何childeren。wx頂級菜單欄事件(python)
I.e.與菜單結構
我能捕捉到事件點擊保存或退出項目,但我不能確定如何我可以捕獲點擊垃圾郵件的事件
@uhz解決方案几乎工作,但我不會推薦它。爲什麼不允許點擊頂級菜單項目,這一定是有原因的。在我的環境下(Debian,wx 2.8),他的解決方案會產生奇怪的行爲,例如通過懸停項目來觸發事件。
你的用例更多的是一個工具欄,我建議你在這裏使用一個。如果您不熟悉它們,我可以再次建議看看examples at zetcode(部分工具欄)。
據我瞭解,文件和垃圾郵件是頂級菜單項。在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
不錯的嘗試了一種解決方法,但這不是它是如何要去工作。看到我的答案,爲什麼這個解決方案不是很好。你使用你的環境是否遇到不同的行爲? – phineas
在Windows上,它的工作原理非常正確 – uhz
我嘗試了這個第一次,即時在Windows上,它沒有工作。 – Hugoagogo