我正在使用python和tkinter开发一个项目,其中文本小部件中的内容 根据程序动态更改。现在我的文本小部件中添加了许多网址。点击它们后,网页浏览器应打开。
http://effbot.org/zone/tkinter-text-hyperlink.htm我之所以提到这是为了在我的代码中创建超链接。但现在我的问题是浏览器会打开,只要在文本窗口小部件上显示网址,而不是点击它。
这是我的代码。
def click1(self,url):
webbrowser.open(url)
restitle,resthumb,resurl=printit()#title,thumbnailimage,url array
while restitle:
raw_data = urllib.request.urlopen(resthumb[0]).read()
tim = PIL.Image.open(io.BytesIO(raw_data))
tim = tim.resize((100, 100), PIL.Image.ANTIALIAS)
timage = ImageTk.PhotoImage(tim)
Lb1.image_create(END, image=timage)
curl=resurl[0]
Lb1.update()
images.append(timage)
Lb1.insert(END,restitle,hyperlink.add(click1(resurl[0])))#Passing url
Lb1.insert(END,"\n")
restitle.pop(0)
resurl.pop(0)
resthumb.pop(0)
我的问题: 我需要知道如何只打开浏览器点击特定文本(超链接),而不是当它们被添加到文本小部件时。我是python和tkinter的新手抱歉代码中的任何错误snippet.Thanks提前。
答案 0 :(得分:1)
这里的问题是你不能将函数直接传递给这个方法hyperlink.add
,因为你用一个参数调用它就会被执行。 (请注意,在链接中显示的示例中,我们只传递函数的引用而不调用它。)
如果参数对于所有行都相同,则可以使用lambda表达式,但每次都需要更改url,因此,您需要使用类似partial
工具的内容:
from functools import partial
[...]
Lb1.insert(END,restitle,hyperlink.add(partial(click1, resurl[0])))