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()
我的目标是在单击GUI小部件中的按钮时打开一个URL。但是,我不是 确定如何做到这一点。当我运行脚本而不点击时,Python会打开两个新窗口 任何东西。此外,单击按钮时没有任何反应。
答案 0 :(得分:4)
你应该使用
button = Button(root, text="CLCK", command=lambda aurl=url:OpenUrl(aurl))
这是在需要参数时发送回调的正确方法 来自here:
常见的初学者错误是在何时调用回调函数 构建小部件。也就是说,而不是只给予 函数的名称(例如“回调”),程序员添加括号和 函数的参数值:
如果这样做,Python将在创建之前调用回调函数 小部件,并将函数的返回值传递给Tkinter。 Tkinter的 然后尝试将返回值转换为字符串,并告诉Tk 激活按钮时调用具有该名称的函数。这是 可能不是你想要的。
对于像这样的简单情况,您可以使用lambda表达式作为链接 在Tkinter和回调函数之间:
答案 1 :(得分:0)
或者,您不必将URL作为命令的参数传递。
显然,你的OpenUrl方法在这种情况下会打开一个URL,但它会起作用。from Tkinter import *
import webbrowser
url = 'http://www.sampleurl.com'
root = Tk()
frame = Frame(root)
frame.pack()
def OpenUrl():
webbrowser.open_new(url)
button = Button(frame, text="CLICK", command=OpenUrl)
button.pack()
root.mainloop()