Я только начал изучать, как создать настраиваемое всплывающее диалоговое окно; и, как оказалось, tkinter messagebox
очень прост в использовании, но он тоже не слишком многого. Вот моя попытка создать диалоговое окно, которое будет принимать входные данные, а затем сохранить их в имени пользователя.
Мой вопрос в том, что является рекомендуемым стилем для реализации этого? Как предложил Брайан Окли в этом комментарии.
Я бы посоветовал не использовать глобальную переменную. Вместо того, чтобы диалог разрушался, уничтожьте его только фактический виджет, но оставите объект живым. Затем вызовите что-то вроде
inputDialog.get_string()
а затемdel inputDialog
из вашей основной логики.
Возможно, использование глобальной переменной для возврата моей строки - не лучшая идея, но почему? И каков предложенный способ? Я запутался, потому что я не знаю, как вызвать getstring, как только окно будет уничтожено, и... строка об уничтожении фактического виджета, я не уверен, относится ли он к TopLevel
.
Причина, по которой я спрашиваю, заключается в том, что я хочу, чтобы всплывающее окно было уничтожено после нажатия кнопки отправки; потому что в конце концов, я хочу, чтобы он вернулся к основной программе, обновил что-то и т.д. Что должен send
метод кнопки в этом случае? Потому что идея в этом конкретном примере - позволить пользователю делать это снова и снова, если он этого захочет.
import tkinter as tk
class MyDialog:
def __init__(self, parent):
top = self.top = tk.Toplevel(parent)
self.myLabel = tk.Label(top, text='Enter your username below')
self.myLabel.pack()
self.myEntryBox = tk.Entry(top)
self.myEntryBox.pack()
self.mySubmitButton = tk.Button(top, text='Submit', command=self.send)
self.mySubmitButton.pack()
def send(self):
global username
username = self.myEntryBox.get()
self.top.destroy()
def onClick():
inputDialog = MyDialog(root)
root.wait_window(inputDialog.top)
print('Username: ', username)
username = 'Empty'
root = tk.Tk()
mainLabel = tk.Label(root, text='Example for pop up input box')
mainLabel.pack()
mainButton = tk.Button(root, text='Click me', command=onClick)
mainButton.pack()
root.mainloop()