Python 2.7 Tkinter 点击打开 webbrowser

pha*_*s15 4 python tkinter

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 会打开两个新窗口。此外,当我单击按钮时没有任何反应。

joa*_*uin 5

你应该使用

button = Button(root, text="CLCK", command=lambda aurl=url:OpenUrl(aurl))
Run Code Online (Sandbox Code Playgroud)

这是在需要参数时发送回调的正确方法。
这里

一个常见的初学者错误是在构造小部件时调用回调函数。也就是说,程序员不是只给出函数的名称(例如“回调”),而是向函数添加括号和参数值:

如果这样做,Python 将在创建小部件之前调用回调函数,并将函数的返回值传递给 Tkinter。Tkinter 然后尝试将返回值转换为字符串,并告诉 Tk 在按钮被激活时调用具有该名称的函数。这可能不是您想要的。

对于像这样的简单情况,您可以使用 lambda 表达式作为 Tkinter 和回调函数之间的链接: