Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python2.7 Tkinter单击打开webbrowser_Python_Tkinter - Fatal编程技术网

Python2.7 Tkinter单击打开webbrowser

Python2.7 Tkinter单击打开webbrowser,python,tkinter,Python,Tkinter,我的目标是在单击GUI小部件中的按钮时打开URL。然而,我不知道如何做到这一点 当我运行脚本而不单击时,Python会打开两个新窗口 任何东西此外,当我单击按钮时,不会发生任何事情。您应该使用 from Tkinter import * import webbrowser root = Tk() frame = Frame(root) frame.pack() url = 'http://www.sampleurl.com' def OpenUrl(url): webbrowser

我的目标是在单击GUI小部件中的按钮时打开URL。然而,我不知道如何做到这一点

当我运行脚本而不单击时,Python会打开两个新窗口 任何东西此外,当我单击按钮时,不会发生任何事情。

您应该使用

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()
这是在需要参数时发送回调的正确方法。
发件人:

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

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

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


或者,您不必将URL作为命令的参数传递。显然,在这种情况下,您的OpenUrl方法将无法打开该URL,但它可以工作

button = Button(root, text="CLCK", command=lambda aurl=url:OpenUrl(aurl))
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()