2014-10-10 95 views
0

我想在Python 2.6.5中执行下面的代码。我想要做的是显示一个带有“应用程序”菜单的主窗口。我希望菜单有一系列应该与应用程序字典的键相对应的命令。当我点击该命令时,我想要打开默认的Web浏览器并导航到该应用程序字典中用于该特定键的URL。相反,当我执行代码时,浏览器打开到应用程序字典中的第一个网址,而没有任何点击。请帮助!Python的Tkinter菜单命令不工作

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
appsMenu.add_command(label=app, command=openApp(Apps[app])) 

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

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

Kevin,谢谢你的回复。我是Python和编程的新手,我非常感谢帮助。您的解决方案效果非常好! – 2014-10-10 19:37:05