我是一个蟒蛇初学者。试着做一个新的按钮来关闭窗口。我得到了错误消息:
异常在Tkinter回调Traceback(最近调用最后):文件/系统/库/框架/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py,第1536行,在调用返回self.func(*args)文件tk_cp_successful.py,第138行,在按钮推送self.root.destroy()File"/System/库/框架/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py",第1859行,在销毁self.tk.call中("销毁",自我。_w)TclError: can can can't调用"销毁"命令:应用程序已被销毁
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")
如果适用,root.quit()
可能会修复该错误。
忽略了代码中的所有其他问题,前几天我也遇到了同样的问题。当调用self.root.destroy()
时,Tkinter将退出root.mainloop
。然后在调用root.mainloop
的地方之后,您可能会调用root.destroy
。这意味着你试图破坏两次,这就是导致错误的原因。处理这种情况的一种方法是让异常
静默传递(尽管一般来说这不是好的做法):
try:
root.destroy()
except:
pass
我可能错了,但这是我唯一能想象的导致这个错误的原因。
你的代码有很多问题
grid()
和pack()
,即
self。根=tk。Tk()
(作为Tk导入
)或
标签1=标签(self,text=“Username”)
(来自tkinter导入*
)
- 程序中无
mainloop
- 在类中使用global是不必要的,而且样式很差
在任何情况下,下面的修改代码运行,所以希望它会有所帮助。
import sys
if sys.version_info[0] < 3:
import Tkinter as tk ## Python 2.x
else:
import tkinter as tk ## Python 3.x
class LoginPage():
def __init__(self):
self.root=tk.Tk()
label = tk.Label(self.root, text="Welcome to VISA Login Page",fg="blue")
label.grid(row=0)
label_1 = tk.Label(self.root, text="Username")
label_2 = tk.Label(self.root, text="Password")
self.entry_1 = tk.Entry(self.root)
self.entry_2 = tk.Entry(self.root, show="*")
label_1.grid(row=1, sticky="e")
label_2.grid(row=2, sticky="e")
self.entry_1.grid(row=1, column=1)
self.entry_2.grid(row=2, column=1)
## doesn't do anything at this time
##checkbox = tk.Checkbutton(self.root, text="Keep me logged in")
##checkbox.grid(row=3, columnspan=2)
logbtn = tk.Button(self.root, text="Login", command = self._login_btn_clickked)
logbtn.grid(row=9, columnspan=2)
myButton = tk.Button(self.root, text="Exit",command = self.buttonPushed)
myButton.grid(row=10)
self.root.mainloop()
def buttonPushed(self):
self.root.destroy()
def _login_btn_clickked(self):
#print("Clicked")
username = self.entry_1.get()
password = self.entry_2.get()
#print(username, password)
if username == "test" and password == "test":
print "OK login"
#box.showinfo("Login info", "Welcome Tester")
#button1 = ttk.Button(self.root, text="Please click, Welcome to login!!!",
# command=lambda: self.controller.show_frame(StartPage))
#button1.pack()
else:
#box.showerror("Login failed", "Incorrect username")
print "Error"
LP=LoginPage()
问题内容: 我需要能够动态加载/卸载角度应用程序而不会引起内存泄漏。在jQuery中,您可以执行相应的销毁代码,事件处理程序未绑定等。 我一直无法在有角度的文档中找到任何内容,提及启动应用程序后可能会拆除应用程序的可能性。 我的第一次尝试是像这样破坏rootScope: 但这似乎不起作用,而且我不确定即使清除了注入器和服务也将如何清理。 应该怎么做? 问题答案: 2013年3月10日更新: 我发现
问题内容: 我已经在bean的“销毁方法”中放入了sysout语句。当我运行示例代码时,sysout没有得到输出。这是否意味着销毁方法未得到调用? 测试类别: The Bean 配置文件: 问题答案: 你的示例不起作用,因为你没有关闭appcontext,只是让程序终止。 调用上下文,你将看到被调用的bean destroy-method。
问题内容: 使用节点8.4.0: 但是,以下错误也不是交互式的:(唯一的区别是分号) 同样在Chrome控制台中: 有人可以解释吗? 澄清度 这与按预期工作的let,var或cosnt解构无关。这与先前定义的变量(或非严格模式)有关:从chrome控制台: 问题答案: 将对象分解为现有变量的正确语法是 这允许成为一种表达。否则,将其解释为带有逗号运算符的块,这将导致错误。 它在控制台中不带括号和分
问题内容: 我在hapijs中使用jwt插件和策略。 我可以在登录用户时创建jwt令牌,并通过’jwt’策略使用同一令牌对其他API进行身份验证。 我将令牌设置为cookie,其中是令牌名称。另外,我没有将这些令牌保存在数据库中。 但是,注销时如何销毁jwt令牌? 请提出一种方法。 问题答案: JWT存储在浏览器中,因此删除令牌以删除客户端的cookie 如果您还需要在令牌到期之前从服务器端使令牌
销毁 Destroy 在不需要使用iScoll的时候调用iScroll实例的公共方法destroy()可以释放一些内存。 myScroll.destroy(); myScroll = null;