Richtige Methode zum Implementieren eines benutzerdefinierten Popup-Tkinter-Dialogfelds

Ich habe gerade gelernt, wie man ein benutzerdefiniertes Popup-Dialogfeld erstellt. und wie sich herausstellt, dietkinter messagebox ist wirklich einfach zu bedienen, macht aber auch nicht zu viel. Hier ist mein Versuch, ein Dialogfeld zu erstellen, das Eingaben übernimmt und diese dann unter dem Benutzernamen speichert.

Meine Frage ist, was ist der empfohlene Stil, um dies zu implementieren? Wie Bryan Oakley angedeutet hatdieser Kommentar.

Ich würde davon abraten, eine globale Variable zu verwenden. Anstatt den Dialog selbst zerstören zu lassen, lassen Sie ihn nur das eigentliche Widget zerstören, aber das Objekt am Leben lassen. Rufen Sie dann so etwas aninputDialog.get_string() und danndel inputDialog von Ihrer Hauptlogik.

Vielleicht ist es nicht die beste Idee, die globale Variable zu verwenden, um meinen String zurückzugeben, aber warum? Und wie sieht der vorgeschlagene Weg aus? Ich bin verwirrt, weil ich nicht weiß, wie ich den Getstring auslösen soll, wenn das Fenster zerstört ist, und ... ich bin mir nicht sicher, ob er es meintTopLevel.

Der Grund, den ich frage, ist, dass ich möchte, dass das Popup-Fenster zerstört wird, nachdem ich den Senden-Knopf gedrückt habe. denn schließlich möchte ich, dass es wieder zum Hauptprogramm zurückkehrt, etwas aktualisiert usw. Was soll die Button-Methode?send in diesem Fall tun? Denn die Idee in diesem speziellen Beispiel ist es, dem Benutzer zu erlauben, es immer und immer wieder zu machen, wenn er es wünscht.

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage