tkinter回调异常_处理python tkinter中的异常
我在
Python Tkinter中編寫了一個應用程序.我最近注意到,對于其中一個操作,如果該操作失敗,它有時會關閉(不會給出任何錯誤).我寫了一個小程序來說明問題: –
import os
from 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 tk
import traceback
class 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 = Catcher
b = tk.Button(master, text="OK", command=copydir)
b.pack()
master.mainloop()
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的tkinter回调异常_处理python tkinter中的异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xman的思维导图快捷键_一次性入门大纲
- 下一篇: 台儿庄大捷:国军在抗日战争中的辉煌胜利