#python #tkinter
#python #tkinter
Вопрос:
Итак, в настоящее время я создал кнопку, которая способна ссылаться на указанный сайт (жестко запрограммированный) в этом списке, как и предполагалось.
urls = ['https://steamcharts.com/top',
'https://spotifycharts.com/regional/global/weekly/latest',
'https://www.anime-planet.com/anime/top-anime/week'
]
С помощью этого кода:
def callback(url):
webbrowser.open_new(url)
source_bttn = Button(win, text="Show Source", fg="blue", cursor="hand2")
source_bttn.pack()
source_bttn.bind("<Button-1>", lambda e: callback(urls[1]))
Однако вместо этого я хочу, чтобы сайт, который эти кнопки используют для пользователя, зависел от выбора переключателя. Ниже приведена упрощенная версия моего основного кода
import webbrowser
from tkinter import *
# SETUP WINDOW ELEMENTS
win = Tk()
win.title("Setting Up GUI")
win.geometry("500x500")
# List elements
Titles = ["Steam Top Gamesn[Title and Current Player Count]",
"Top Weekly Spotify Songsn[Title and Artist]",
"Trending Anime's Weeklyn[Title and Release Date]",
"Steam Top Gamesn[3 October 2020]"
]
urls = ['https://steamcharts.com/top',
'https://spotifycharts.com/regional/global/weekly/latest',
'https://www.anime-planet.com/anime/top-anime/week'
]
Options = [(Titles[0]),
(Titles[1]),
(Titles[2]),
]
# Add RadioButtons Labels to "Current #2" frame
# Create an empty dictionary to fill with Radiobutton widgets
option_select = dict()
# create a variable class to be manipulated by Radio buttons
ttl_var = StringVar(value=" ")
# Fill radiobutton dictionary with keys from game list with Radiobutton
# values assigned to corresponding title name
for title in Options:
option_select[title] = Radiobutton(win, variable=ttl_var, text=title, value=title,
justify=LEFT)
# Display
option_select[title].pack(fill='both')
# Creating button link
def callback(url):
webbrowser.open_new(url)
source_bttn = Button(win, text="Show Source", fg="blue", cursor="hand2")
source_bttn.pack()
source_bttn.bind("<Button-1>", lambda e: callback(urls[1]))
win.mainloop()
Мне интересно, есть ли способ включить эту callback
функцию — каким-то образом в for title in Options:...
строку кода переключателя.
Ответ №1:
Вы можете просто использовать a IntVar
вместо a StringVar
, а затем использовать значение для индексации urls
в callback
:
...
ttl_var = IntVar(value=0)
for num, title in enumerate(Titles[:-1]):
option_select[title] = Radiobutton(win, variable=ttl_var, text=title,
value=num, justify=LEFT)
option_select[title].pack(fill='both')
def callback(event=None):
webbrowser.open_new(urls[ttl_var.get()])
source_bttn = Button(win, text="Show Source", fg="blue", cursor="hand2")
source_bttn.pack()
source_bttn.bind("<Button-1>", callback)
...