Как сделать текстовую ссылку в Python3.7 tkinter - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать программу чтения RSS с графическим интерфейсом в Python 3.7, и все почти работает, но есть проблема, вместо того, чтобы каждая строка указывала на другую ссылку, каждая строка перемещалась к той же самой ссылке.Что я могу сделать, чтобы решить эту проблему?

Код:

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()

1 Ответ

0 голосов
/ 29 ноября 2018

Вы не передаете ссылку в качестве аргумента функции callback, поэтому при срабатывании callback используется текущее значение article_link, которое является ссылкой последней записи.Чтобы это исправить, вы можете передать ссылку на callback с помощью лямбда-функции в цикле for:

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)) 
...