Manera correcta de implementar un cuadro de diálogo emergente personalizado tkinter

Acabo de comenzar a aprender cómo crear un cuadro de diálogo emergente personalizado; y como resulta, eltkinter messagebox Es realmente fácil de usar, pero tampoco hace demasiado. Aquí está mi intento de crear un cuadro de diálogo que tome entrada y luego lo almacene en el nombre de usuario.

Mi pregunta es ¿cuál es el estilo recomendado para implementar esto? Como Bryan Oakley sugirió eneste comentario.

Yo recomendaría no usar una variable global. En lugar de que el diálogo se destruya solo, haga que destruya solo el widget real pero que deje el objeto vivo. Entonces, llama a algo comoinputDialog.get_string() y entoncesdel inputDialog de su lógica principal.

Tal vez usar la variable global para devolver mi cadena no sea la mejor idea, pero ¿por qué? ¿Y cuál es la forma sugerida? Me confundo porque no sé cómo activar la cadena de obtención una vez que se destruye la ventana, y ... la línea sobre la destrucción del widget real, no estoy seguro de si se está refiriendo aTopLevel.

La razón por la que pregunto es porque quiero que el cuadro emergente se destruya después de presionar el botón enviar; porque después de todo, quiero que vuelva al programa principal, actualice algo, etc. ¿Qué debería hacer con el botón?send hacer en este caso? Porque la idea en este ejemplo particular es permitir que el usuario lo haga una y otra vez, si lo desea.

<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>

Respuestas a la pregunta(3)

Su respuesta a la pregunta