Maneira correta de implementar uma caixa de diálogo de tkinter pop-up personalizada

Acabei de começar a aprender como criar uma caixa de diálogo pop-up personalizada; e, como se vê, otkinter messagebox é realmente fácil de usar, mas também não faz muito. Aqui está a minha tentativa de criar uma caixa de diálogo que receberá informações e, em seguida, armazene isso no nome de usuário.

Minha pergunta é qual é o estilo recomendado para implementar isso? Como Bryan Oakley sugeriu emeste comentário.

Eu aconselharia contra o uso de uma variável global. Em vez de ter o diálogo destruído, ele destrói apenas o widget real, mas deixa o objeto ativo. Então, ligue para algo comoinputDialog.get_string() e depoisdel inputDialog da sua lógica principal.

Talvez usar a variável global para retornar minha string não seja a melhor ideia, mas por quê? E qual é o caminho sugerido? Eu fico confuso porque eu não sei como acionar o getstring uma vez que a janela é destruída, e ... a linha sobre a destruição do widget real, eu não tenho certeza se ele está se referindo aTopLevel.

A razão pela qual eu peço é porque eu quero que a caixa pop-up seja destruída depois que eu pressiono o botão de envio; porque afinal de contas, eu quero que ele volte ao programa principal, atualize algo, etc. O que deveria ser o método do botão?send fazer neste caso? Porque a idéia neste exemplo particular é permitir que o usuário faça isso repetidamente, se ele desejar.

<code>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()
</code>

questionAnswers(3)

yourAnswerToTheQuestion