import osfrom Tkinter import *def copydir(): src = "D:\a\x\y" dest = "D:\a\x\z" os.rename(src,dest)master = Tk()def callback(): global master master.after(1,callback) copydir() print "click!"b = button(master,text="OK",command=copydir)b.pack()master.after(100,callback)mainloop()
要重现该问题,请在“ms命令提示符”中打开它将重命名的文件夹,以便重命名它将从Tkinter代码中引发异常.
我的原始代码是使用线程并且还在执行其他任务,因此我尝试使此测试脚本中的 *** 作尽可能相似.
现在,如果我通过双击它来运行此代码,那么程序只需关闭而不会抛出任何错误.但是,如果我从控制台运行此脚本,那么异常消息将被转储到控制台上,至少我知道,出了点问题.
我可以通过在尝试重命名的代码中使用try / catch来修复此代码,但我也想告知用户这个失败.所以我只想知道在编写Tkinter应用程序时应该遵循哪些编码方法,我想知道: –
1)每当用户通过双击它运行它时,我可以让我的脚本转储一些文件堆栈跟踪.通过这个至少,我会知道一些错误并修复它.
2)我可以阻止tkinter应用程序退出此类错误并在某些TK对话框中抛出任何异常.
感谢帮助!!
解决方法 您可以按照说明 here覆盖Tkinter的CallWrapper
.必须使用命名的Tkinter导入而不是通配符导入才能这样做: import Tkinter as tkimport tracebackclass Catcher: def __init__(self,func,subst,Widget): self.func = func self.subst = subst self.Widget = Widget def __call__(self,*args): try: if self.subst: args = apply(self.subst,args) return apply(self.func,args) except SystemExit,msg: raise SystemExit,msg except: traceback.print_exc(file=open('test.log','a'))# ...tk.CallWrapper = Catcherb = tk.button(master,command=copydir)b.pack()master.mainloop()总结
以上是内存溢出为你收集整理的处理python tkinter中的异常全部内容,希望文章能够帮你解决处理python tkinter中的异常所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)