如何在 Python3.7 tkinter 中制作文本 link
How to make a text link in Python3.7 tkinter
我正在尝试在 Python 3.7 中使用 GUI 制作 RSS reader 并且一切几乎都可以正常工作但是有一个问题,而不是每一行都指向另一行 link,每一行移动到完全相同的link。
我能做些什么来解决这个问题?
代码:
import feedparser
from tkinter import *
import webbrowser
def callback(event):
webbrowser.open_new(article_link)
feed = feedparser.parse("http://www.widgeti.co.il/feed/")
feed_title = feed['feed']['title']
feed_entries = feed.entries
root = Tk()
text = Text(root)
for entry in feed.entries:
article_title = entry.title
article_link = entry.link
article_published_at = entry.published # Unicode string
article_published_at_parsed = entry.published_parsed # Time object
article_author = entry.author
content = entry.summary
article_tags = entry.tags
print ("{}[{}]".format(article_title, article_link))
print ("Published at {}".format(article_published_at))
print ("Published by {}".format(article_author))
print("Content {}".format(content))
print("catagory{}".format(article_tags))
link = Label(root, text="{}\n".format(article_title), fg="blue", cursor="hand2")
link.pack()
link.bind("<Button-1>" ,callback)
text.tag_config("here")
root.mainloop()
您没有将参数中的 link 传递给 callback
函数,因此当 callback
被触发时,它使用 article_link
的当前值,即link 最后一个条目。要解决此问题,您可以在 for 循环中使用 lambda 函数将 link 传递给 callback
:
def callback(event, article_link):
webbrowser.open_new(article_link)
# ...
for entry in feed.entries:
# ...
link.bind("<Button-1>", lambda event, link=article_link: callback(event, link))
我正在尝试在 Python 3.7 中使用 GUI 制作 RSS reader 并且一切几乎都可以正常工作但是有一个问题,而不是每一行都指向另一行 link,每一行移动到完全相同的link。 我能做些什么来解决这个问题?
代码:
import feedparser
from tkinter import *
import webbrowser
def callback(event):
webbrowser.open_new(article_link)
feed = feedparser.parse("http://www.widgeti.co.il/feed/")
feed_title = feed['feed']['title']
feed_entries = feed.entries
root = Tk()
text = Text(root)
for entry in feed.entries:
article_title = entry.title
article_link = entry.link
article_published_at = entry.published # Unicode string
article_published_at_parsed = entry.published_parsed # Time object
article_author = entry.author
content = entry.summary
article_tags = entry.tags
print ("{}[{}]".format(article_title, article_link))
print ("Published at {}".format(article_published_at))
print ("Published by {}".format(article_author))
print("Content {}".format(content))
print("catagory{}".format(article_tags))
link = Label(root, text="{}\n".format(article_title), fg="blue", cursor="hand2")
link.pack()
link.bind("<Button-1>" ,callback)
text.tag_config("here")
root.mainloop()
您没有将参数中的 link 传递给 callback
函数,因此当 callback
被触发时,它使用 article_link
的当前值,即link 最后一个条目。要解决此问题,您可以在 for 循环中使用 lambda 函数将 link 传递给 callback
:
def callback(event, article_link):
webbrowser.open_new(article_link)
# ...
for entry in feed.entries:
# ...
link.bind("<Button-1>", lambda event, link=article_link: callback(event, link))