当我尝试将菜单按钮绑定到某个功能时,我无法获得合理的输出。首先,我传递一些项目在我的应用程序中创建一个菜单:
imported_applications = ["foo", "bar"]
application_menu = wx.Menu()
for app in imported_applications:
# Create Items
item = wx.MenuItem(application_menu, wx.ID_ANY, app, )
application_menu.Append(item)
# Bind to function
self.Bind(wx.EVT_MENU, self.select_application, item, id=app)
# Add to menubar
menubar.Append(application_menu, '&Applications')
self.SetMenuBar(menubar)
然后我在调用select_application时尝试获取该参数:
def select_application(self, event):
id_selected = event.GetId()
print(id_selected)
输出:
-2014
-2015
不知道它来自何处,但我希望它输出我在bind
设置的ID。 imported_applications的内容是两个字符串,即[" foo"," bar]
答案 0 :(得分:0)
app = [ "foo", "bar", ]
for app in ...
此处,您的 app 变量会被覆盖。
答案 1 :(得分:0)
您没有正确追加项目。wx.Menu
需要其Append
方法的其他参数。如果按原样运行该代码,则应该收到错误。相反,您将要使用AppendItem
。如果您希望在事件处理程序中打印菜单标签,那么您必须从事件中提取id并使用该标签获取标签的文本。这是一个演示就是这样:
import wx
class MyForm(wx.Frame):
#----------------------------------------------------------------------
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "wx.Menu Tutorial")
# Add a panel so it looks the correct on all platforms
self.panel = wx.Panel(self, wx.ID_ANY)
menuBar = wx.MenuBar()
fileMenu = wx.Menu()
imported_applications = ["foo", "bar"]
for item in imported_applications:
item = wx.MenuItem(fileMenu, wx.ID_ANY, item)
fileMenu.AppendItem(item)
self.Bind(wx.EVT_MENU, self.onMenuPress, item)
menuBar.Append(fileMenu, "&File")
self.SetMenuBar(menuBar)
#----------------------------------------------------------------------
def onMenuPress(self, event):
""""""
menu_id = event.GetId()
obj = event.GetEventObject()
menu_label = obj.GetLabelText(menu_id)
print menu_label
# Run the program
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm().Show()
app.MainLoop()