from Tkinter import *
import webbrowser
root = Tk()
frame = Frame(root)
frame.pack()
url = 'http://www.sampleurl.com'
def OpenUrl(url):
webbrowser.open_new(url)
button = Button(frame, text="CLICK", command=OpenUrl(url))
button.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我的目标是在单击 GUI 小部件中的按钮时打开一个 URL。但是,我不确定如何执行此操作。
当我在不单击任何内容的情况下运行脚本时,Python 会打开两个新窗口。此外,当我单击按钮时没有任何反应。
你应该使用
button = Button(root, text="CLCK", command=lambda aurl=url:OpenUrl(aurl))
Run Code Online (Sandbox Code Playgroud)
这是在需要参数时发送回调的正确方法。
从这里:
一个常见的初学者错误是在构造小部件时调用回调函数。也就是说,程序员不是只给出函数的名称(例如“回调”),而是向函数添加括号和参数值:
如果这样做,Python 将在创建小部件之前调用回调函数,并将函数的返回值传递给 Tkinter。Tkinter 然后尝试将返回值转换为字符串,并告诉 Tk 在按钮被激活时调用具有该名称的函数。这可能不是您想要的。
对于像这样的简单情况,您可以使用 lambda 表达式作为 Tkinter 和回调函数之间的链接: