Ich versuche, ein benutzerdefiniertes Texteingabefeld zu erstellen, das ein Texteingabefeld in der Mitte hat und die Benutzereingabe zurückgeben kann. Ich versuche speziell etwas zu machen, das in andere Programme importiert und wiederverwendet werden kann. Meine aktuelle Iteration verwendet eine "Inputdialog" -Klasse, die gut funktioniert, um die Eingabe zu erhalten, wenn sie in ihrer eigenen .py-Datei ist. Wenn ich jedoch versuche, das Modul in ein anderes Skript zu importieren, tut die "ok" -Schaltfläche scheinbar nichts "button wirft einen" ImportError: kann den 'Inputdialog' Fehler nicht importieren, nachdem das Popup geschlossen wurde. Python Tkinter benutzerdefinierte msgbox schlägt während des Imports fehl
Das folgende ist mein Code, der zur Zeit, wenn laufen als Standalone-Skript funktioniert:
from tkinter import *
class inputdialog:
def __init__(self):
self.value = None
self.root = Tk()
self.root.withdraw()
self.top = Toplevel(self.root)
Label(self.top, text="Value").pack()
self.e = Entry(self.top)
self.e.pack(padx=5)
b = Button(self.top, text="OK", command=self.ok)
b.pack(pady=5, padx=5, side="right")
self.root.mainloop()
def ok(self):
self.value = self.e.get()
self.root.destroy()
if __name__ == "__main__":
test = inputdialog()
print(test.value)
Das Folgende ist, wie ich dieses Modul in ein anderes Programm importiert haben, die derzeit nicht arbeiten:
if __name__ == "__main__":
# These two lines below are needed to make sure that "askopenfilename"
# doesn't show it's top level tkinter window
root = Tk()
root.withdraw()
entdbemp = askopenfilename(title="Please select a file: ")
# Here is my non-working module call
master = inputdialog()
print(master.value)
Warum sollte meine Schaltfläche "OK" beim Importieren nicht mehr funktionieren? Gibt es eine Möglichkeit, meinen Code zu reparieren, damit er importiert werden kann? Gibt es eine bessere Möglichkeit, ein importierbares Texteingabemodul mit tkinter zu erstellen?
Ein Problem ist, dass Sie zwei Instanzen von 'Tk' erstellen. Tkinter hat genau eine Instanz von 'Tk'. –