TclError: kann nicht aufrufen "zerstören" - Befehl: Anwendung zerstört wurde
Ich bin ein python Anfänger. Versuchen Sie, um eine neue Schaltfläche, um das Fenster zu schließen. Ich bekam die Fehlermeldung:
Exception in Tkinter callback
Traceback (most recent call last): File
"/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py",
line 1536, in nennen
return self.func(*args) File "tk_cp_successful.py", line 138, in buttonPushed
selbst.root.destroy() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py",
Linie 1859, in zerstören
selbst.tk.call ("vernichten", selbst._w) TclError: kann nicht aufrufen "zerstören" - Befehl: Anwendung zerstört wurde
class LoginPage(tk.Frame):
def __init__(self, parent, controller):
self.controller = controller
self.root = tk.Tk()
global entry_1
global entry_2
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Welcome to VISA Login Page",fg="blue")
label.pack(pady=10,padx=10)
label_1 = Label(self, text="Username")
label_1.pack()
label_2 = Label(self, text="Password")
label_2.pack()
entry_1 = Entry(self)
entry_1.pack()
entry_2 = Entry(self, show="*")
entry_2.pack()
label_1.grid(row=0, sticky=E)
label_1.pack()
label_2.grid(row=1, sticky=E)
label_2.pack()
entry_1.grid(row=0, column=1)
entry_1.pack()
entry_2.grid(row=1, column=1)
entry_2.pack()
checkbox = Checkbutton(self, text="Keep me logged in")
checkbox.grid(columnspan=2)
checkbox.pack()
logbtn = Button(self, text="Login", command = self._login_btn_clickked)
logbtn.grid(columnspan=2)
logbtn.pack()
myButton = Button(self, text="Exit",command = self.buttonPushed)
myButton.pack()
def buttonPushed(self):
self.root.destroy()
def _login_btn_clickked(self):
#print("Clicked")
username = entry_1.get()
password = entry_2.get()
#print(username, password)
if username == "test" and password == "test":
#box.showinfo("Login info", "Welcome Tester")
button1 = ttk.Button(self, text="Please click, Welcome to login!!!",
command=lambda: self.controller.show_frame(StartPage))
button1.pack()
else:
box.showerror("Login failed", "Incorrect username")
- Ich habe noch nie gesehen:
logbtn.grid(columnspan=2); logbtn.pack()
, das heißt, "reiben" ein widget, und sofort nach dem "Verpacken" können. Ich weiß nicht, was ist der eigentliche Effekt, aber ich fast ziemlich sicher, dass das nicht der "richtige" Weg, es zu tun. - vielen Dank für die hilft. Ich kann laufen, ohne zu zerstören. alle gut funktionieren. sobald ich laufen buttonPushed, es kommen Fehler. fühlen root ist global, es kann nicht aus dieser Klasse --------.selbst.root.destroy()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es viele Probleme mit Ihrem code
grid()
undpack()
import tkinter as tk
oderfrom tkinter import *
, d.h.self.root = tk.Tk()
(import as tk
) oderlabel_1 = Label(self, text="Username")
(from tkinter import *
)mainloop
im ProgrammIn jedem Falle die folgende geänderte code wird ausgeführt, also wird es hoffentlich helfen.
Ignorieren alle anderen Probleme mit Ihrem code, ich hatte das gleiche problem den anderen Tag. Wenn Sie anrufen
self.root.destroy()
, Tkinter, verlassen Sie dieroot.mainloop
. Dann nach dem Ort, wo Sie anrufenroot.mainloop
Sie haben wahrscheinlich einen Aufrufroot.destroy
. Dies bedeutet, dass Sie versuchen zu zerstören, zweimal, das ist, was den Fehler verursacht. Eine Möglichkeit, damit umzugehen ist, lassen Sie dieException
pass schweigend (aber im Allgemeinen ist dies keine gute Praxis):Ich kann mich irren, aber das ist das einzige was ich mir vorstellen kann ist diesen Fehler verursacht.
Ggf.
root.quit()
könnte den Fehler beheben.Dieser Fehler tritt normalerweise auf, wenn Sie mehr als 2 mainloops.
Nichts mehr tun, als:
erstellen und dann eine Taste zu beenden:
müssen Sie zerstören die def, da Sie immer wiederholen. Verwenden Sie "Ihre def"
.destroy()
um zu verhindern, dass dieser Fehler passiert. Ich hatte das gleiche Problem. es war einer der def wodurch es für mich und die Zerstörung dieses def in einemif
Anweisung mein Problem gelöst