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>