Используя tkinter с Python, есть ли способ иметь несколько URL-адресов в списке? - PullRequest
0 голосов
/ 20 июня 2019

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

В следующем примере я показываю простой тестовый пример, в котором я хотел бы, чтобы пользователь мог получить доступ к новостям Google, щелкнув URL-адрес под голосом «Новости Google» или «Новости Yahoo», щелкнув URL-адрес под Голос "Yahoo новости".

from tkinter import *
import webbrowser

def weblink(url):
    webbrowser.open_new(url)

list_of_items = ['Google news',
                 'https://news.google.com/',
                 'Yahoo news',
                 'https://news.yahoo.com/']
root = Tk()
lb = Listbox(root)
for item in list_of_items:
    lb.insert(END, item)
    if 'https://' in item:
        lb.bind("<Button-1>", weblink(item))
lb.pack()
root.mainloop()

Проблема в том, что как только я запускаю скрипт, он автоматически открывает веб-страницы, и я не нажимаю на URL, который появляется в корневом окне. И даже если я нажму на URL-адреса, ничего не произойдет.

Я использую Python 3.6 в Windows.

Заранее спасибо!

1 Ответ

1 голос
/ 20 июня 2019

Даже если это работает так, как вы думаете, вы привязываете кнопку ко всему списку, а не к одной строке.Таким образом, ваша функция должна определить, по какому элементу щелкнули, и если это URL или нет.На самом деле это единственный способ сделать это.Я буду рекомендовать событие ListboxSelect, а не Button-1.

from tkinter import *
import webbrowser

def weblink(*args):
    index = lb.curselection()[0]
    item = lb.get(index)
    if 'https://' in item:
        webbrowser.open_new(item)

list_of_items = ['Google news',
                 'https://news.google.com/',
                 'Yahoo news',
                 'https://news.yahoo.com/']
root = Tk()
lb = Listbox(root)
lb.bind('<<ListboxSelect>>', weblink)
for item in list_of_items:
    lb.insert(END, item)
lb.pack()
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...