所以,我有一些简单的框架代码,请注意wx.Frame是 not 的子类,并且框架在全局范围内运行:
import wx
app = wx.App()
def OnSettings(event):
print ("'Settings...' selected")
def OnDefaults(event):
print ("'Defaults...' selected")
def OnPrefs(event):
print ("'Preferences' selected")
def OnOpen(event):
print ("'Open...' selected")
def OnClose(event):
print ("'Close' selected")
def OnCloseAll(event):
print ("'CloseAll' selected")
def OnNew(event):
print ("'New...' selected")
def OnQuit(event):
print ("Quit selected")
top.Close(True)
def OnExit(event):
dlg = wx.MessageDialog(top, "Do you really want to close this application?", "Confirm Exit", wx.OK|wx.CANCEL|wx.ICON_QUESTION)
result = dlg.ShowModal()
dlg.Destroy()
if result == wx.ID_OK:
top.Destroy()
top.Close(True)
def OnRightDown(event):
top.PopupMenu(rootMenu, event.GetPosition())
rootMenu = wx.Menu()
fileMenu = wx.Menu()
itemNew = wx.MenuItem(fileMenu, wx.NewId(), "New...","Create a new instance of something")
fileMenu.Bind(wx.EVT_MENU, OnNew, itemNew)
fileMenu.Append(itemNew)
itemOpen = wx.MenuItem(fileMenu, wx.NewId(), "Open...","Open an existing instance of something")
fileMenu.Bind(wx.EVT_MENU, OnOpen, itemOpen)
fileMenu.Append(itemOpen)
fileMenu.AppendSeparator()
itemClose = wx.MenuItem(fileMenu, wx.NewId(), "Close","Close whatever is open on top")
fileMenu.Bind(wx.EVT_MENU, OnClose, itemClose)
fileMenu.Append(itemClose)
itemCloseAll = wx.MenuItem(fileMenu, wx.NewId(), "Close All","Close everything")
fileMenu.Bind(wx.EVT_MENU, OnCloseAll, itemCloseAll)
fileMenu.Append(itemCloseAll)
rootMenu.AppendSubMenu(fileMenu,"Manage Data","Open, close, or create resources")
configMenu = wx.Menu()
itemSettings = wx.MenuItem(configMenu, wx.NewId(), "Settings...","Configure environmental operating parameters")
configMenu.Bind(wx.EVT_MENU, OnSettings, itemSettings)
configMenu.Append(itemSettings)
itemDefaults = wx.MenuItem(configMenu,wx.NewId(), "Defaults...","Configure default data sources, views, and processing options")
configMenu.Bind(wx.EVT_MENU, OnDefaults, itemDefaults)
configMenu.Append(itemDefaults)
itemPrefs = wx.MenuItem(configMenu,wx.NewId(), "Preferences...","Configure User Interface Cosmetics")
configMenu.Bind(wx.EVT_MENU, OnPrefs, itemPrefs)
configMenu.Append(itemPrefs)
rootMenu.AppendSubMenu(configMenu,"Manage Configuration","Configure Application for operations")
terminalMenu = wx.Menu()
itemExit = wx.MenuItem(terminalMenu,wx.NewId(), "Exit","Terminate after updating and closing anything that's open.")
terminalMenu.Bind(wx.EVT_MENU, OnExit, itemExit)
terminalMenu.Append(itemExit)
itemQuit = wx.MenuItem(terminalMenu,wx.NewId(), "Quit","Close the root window and abandon anything unsaved.")
terminalMenu.Bind(wx.EVT_MENU, OnQuit, itemQuit)
terminalMenu.Append(itemQuit)
rootMenu.AppendSubMenu(terminalMenu,"Terminate Operations","Exit Session")
top =wx.Frame(None, title="Base Window",size=((1400,875)), style=wx.CAPTION|wx.RESIZE_BORDER|wx.WS_EX_PROCESS_IDLE)
top.Bind(wx.EVT_RIGHT_DOWN, OnRightDown)
top.Centre()
top.Show()
app.SetTopWindow(top)
app.MainLoop()
问题是,菜单的事件处理程序均未触发。它们必须存在,如果我将其注释掉,则会出现预期的错误,但存根处理程序不会输出到控制台,并且不会触发“ Quit”事件对话框(为测试目的而添加)。
我到底想念什么?
欢呼