Tkinter Создание нескольких меток из цикла без наложения - PullRequest
0 голосов
/ 25 мая 2018

Это продолжение этого решенного вопроса: Текст ярлыка Tkinter перекрывается в определенном цикле

Я пытаюсь просмотреть список и создать интерактивные ссылки:

#!/usr/bin/env/python

from tkinter import *
import os
import csv
import sys
import webbrowser

def callback(event):
    webbrowser.open_new(event.widget.cget("text"))

def fetch():
    #DO SOME STUFF
    #
    #
    for definition in definitions:
        url = "http://dictionary.com/browse/{0}".format(definition)
        link.set(url)

master = Tk()

link = StringVar()
word_entry = Label(master, text = "word")
word_entry.grid(row=0, column = 0)

e1 = Entry(master)

e1.grid(row=0, column=1)

Button(master, text='Search', command=fetch).grid(row=2, column=1, sticky=(N, S, W, E), pady=4)

#TROUBLE AHEAD
lbl = Label(master, fg="blue", cursor="hand2")
lbl.configure(textvariable=link, wraplength=500, justify = LEFT)
lbl.grid(row=3, column=0, columnspan = 60)
lbl.bind("<Button-1>", callback)
#END TROUBLE    

mainloop()

Основной проблемой является то, что переменная "link" будет только последней строкой в ​​списке.Я читал об использовании "трассировщика", но не повезло.Могу ли я получить упрощенную версию того, что я пытаюсь сделать?В идеале вывод будет выглядеть так:

http://www.dictionary.com/browse/foo

http://www.dictionary.com/browse/bar

http://www.dictionary.com/browse/baz

Я должен добавить, что могу получить желаемый результат, еслиЯ помещаю создание метки в его собственную подпрограмму, но затем происходит повторение каждого последующего поиска.

1 Ответ

0 голосов
/ 26 мая 2018

Похоже ли это на то, что вы ищете?

from tkinter import *
from functools import partial
import webbrowser

definitions = ['foo', 'bar', 'baz']

def callback(event, url):
    webbrowser.open_new(url)

def fetch():
    for index, definition in enumerate(definitions):
        url = "http://dictionary.com/browse/{0}".format(definition)

        lbl = Label(master, fg="blue", cursor="hand2")
        lbl.configure(text=url, wraplength=500, justify = LEFT)
        lbl.grid(row=3+index, column=0, columnspan = 60)
        lbl.bind("<Button-1>", partial(callback, url=url))

master = Tk()

word_entry = Label(master, text = "word")
word_entry.grid(row=0, column = 0)

e1 = Entry(master)
e1.grid(row=0, column=1)

Button(master, text='Search', command=fetch).grid(row=2, column=1, sticky=(N, S, W, E), pady=4)

mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...