Python Tkinter菜单命令不起作用

时间:2014-10-10 19:14:23

标签: python dictionary tkinter command

我试图在Python 2.6.5中执行以下代码。我想要做的是显示一个主窗口,其中包含一个' Applications'菜单。我希望菜单有一系列命令,这些命令应该与Apps字典的键对应。当我单击该命令时,我希望打开默认Web浏览器并导航到该特定键的Apps词典中的URL。相反,当我执行代码时,浏览器会打开Apps字典中的第一个网址,而不会点击任何内容。求救!

from Tkinter import *
import webbrowser

#Real links are to pages on Intranet.
Apps={
     'Google':'http://www.google.com/',
     'Yahoo':'http://www.yahoo.com/'
     }

def openApp(appURL):
     webbrowser.open(appURL, new=1, autoraise=1)
     return None

root=Tk()
menubar=Menu(root)
root.config(menu=menubar)
appsMenu=Menu(menubar)
for app in Apps:
     appsMenu.add_command(label=app, command=openApp(Apps[app]))
menubar.add_cascade(label='Apps', menu=appsMenu)
root.mainloop()

1 个答案:

答案 0 :(得分:2)

 appsMenu.add_command(label=app, command=openApp(Apps[app]))

调用函数的命令参数需要包含在lambda中,以防止它们被立即调用。另外,for循环中绑定的命令需要循环变量作为默认参数,以便每次都绑定正确的值。

 appsMenu.add_command(label=app, command=lambda app=app: openApp(Apps[app]))