Prawidłowy sposób zaimplementowania niestandardowego okna dialogowego podręcznego podręcznika

Właśnie zacząłem uczyć się, jak utworzyć niestandardowe okno dialogowe; i jak się okazuje,tkinter messagebox jest naprawdę łatwy w użyciu, ale nie robi zbyt wiele. Oto moja próba utworzenia okna dialogowego, które przejmie dane, a następnie zapisze je w nazwie użytkownika.

Moje pytanie brzmi: jaki jest zalecany styl wdrożenia? Jak sugerował Bryan Oakleyten komentarz.

Radziłbym nie używać zmiennej globalnej. Zamiast zniszczyć okno dialogowe, niech zniszczy tylko rzeczywisty widget, ale pozostawi obiekt przy życiu. Następnie zadzwoń do czegoś takiegoinputDialog.get_string() i wtedydel inputDialog z twojej głównej logiki.

Może użycie zmiennej globalnej do zwrócenia mojego ciągu nie jest najlepszym pomysłem, ale dlaczego? A jaki jest sugerowany sposób? Jestem zdezorientowany, ponieważ nie wiem, jak uruchomić getstring, gdy okno zostanie zniszczone, i ... linia o zniszczeniu rzeczywistego widżetu, nie jestem pewien, czy on odnosi się doTopLevel.

Pytam, ponieważ chcę, aby wyskakujące okienko zostało zniszczone po naciśnięciu przycisku przesyłania; bo przecież chcę, aby wznowił powrót do programu głównego, zaktualizował coś itp. Jaka powinna być metoda przyciskusend zrobić w tym przypadku? Ponieważ pomysł w tym konkretnym przykładzie polega na umożliwieniu użytkownikowi robienia tego w kółko, jeśli chce.

<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