tk
- это главное окно, которое создается автоматически (если вы не создаете его вручную), и вы должны использовать его для отображения своего результата или для запроса исполнителя, песни и более поздних версий для отображения текста песни.
Вы не можете комбинировать стандартные диалоги - вы должны создать собственный диалог, используя главное окно Tk
или Toplevel
окно (которое используется для создания второго и следующего окна - как диалоговое окно windows)
Это это моя версия Я попытался создать простой пример, но в конце концов я сделал что-то более сложное, но код внутри классов кажется чище и более читабельным.
Программа при запуске создает MainWindow
(Tk
) с Text
для текста и автоматически открывает DialogWindow
(Toplevel
), чтобы запросить исполнителя и песню. После закрытия диалога он получает текст и вставляет Text
в MainWindow
.
Есть кнопка, чтобы снова открыть диалог для поиска нового исполнителя и песни.
import tkinter as tk
import tkinter.messagebox as msg
import requests
class DialogWindow(tk.Toplevel):
def __init__(self, *args, **kwars):
super().__init__(*args, **kwars)
self.title('My Dialog')
self.artist = ''
self.song = ''
self.create_widgets()
def create_widgets(self):
label = tk.Label(self, text="What is the artist name?")
label.pack()
self.entry_artist = tk.Entry(self)
self.entry_artist.pack()
label = tk.Label(self, text="What is the song name?")
label.pack()
self.entry_song = tk.Entry(self)
self.entry_song.pack()
button = tk.Button(self, text='OK', command=self.on_click)
button.pack()
def on_click(self):
# get values from Entries because `destroy` (which will close window)
# will remove widgets from memory and there will be no access to Entries
self.artist = self.entry_artist.get()
self.song = self.entry_song.get()
self.destroy()
class MainWindow(tk.Tk):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.title('My Result')
self.artist = ''
self.song = ''
self.lyrics = ''
self.create_widgets()
# open dialog 1 second after start
self.after(1000, self.on_click)
self.mainloop()
def create_widgets(self):
self.text = tk.Text(self)
self.text.pack()
button = tk.Button(self, text='Open Dialog', command=self.on_click)
button.pack()
def on_click(self):
dialog = DialogWindow(self)
self.wait_window(dialog) # wait for dialog close
self.artist = dialog.artist
self.song = dialog.song
self.get_data()
def set_title(self):
self.title(self.artist.capitalize() + "-" + self.song.capitalize())
def get_data(self):
url = "https://api.lyrics.ovh/v1/{}/{}".format(self.artist, self.song)
try:
response = requests.get(url)
data = response.json()
except Exception as ex:
print('Exception:', ex)
msg.showerror('Exception', ex)
data = dict()
if 'error' in data:
print('Error:', data['error'])
msg.showerror('Error', data['error'])
else:
if 'lyrics' in data:
self.lyrics = data['lyrics']
self.text.delete('1.0', 'end')
self.text.insert('end', self.lyrics)
self.set_title()
else:
msg.showerror('Error', "No Lyrics")
if __name__ == '__main__':
MainWindow()