Обработка исключенных исключений с помощью Tkinter

В моем приложении Tkinter Python я попытался использовать sys.excepthook для обработки исключений sys.excepthook , но мой обработчик никогда не вызывался. Трассировка стека еще распечатана.

Как я могу обрабатывать исключенные исключения в приложении Tkinter?

Вот тривиальный пример, который показывает, что я пробовал:

 import Tkinter as tk import tkMessageBox import traceback import sys class MyApp(tk.Frame): def __init__(self, parent, *args, **kwargs): tk.Frame.__init__(self, parent, *args, **kwargs) self.parent = parent self.button_frame = tk.Frame(self) self.button_frame.pack(side='top') self.button_run = tk.Button( self.button_frame, text="Run", command=self.run ) self.button_run.grid(row=0, column=1, sticky='W') def run(self): tkMessageBox.showinfo('Info', 'The process is running.') raise RuntimeError('Tripped.') def main(): root = tk.Tk() # parent widget MyApp(root).pack(fill='both', expand=True) def handle_exception(exc_type, exc_value, exc_traceback): message = ''.join(traceback.format_exception(exc_type, exc_value, exc_traceback)) tkMessageBox.showerror('Error', message) sys.excepthook = handle_exception root.mainloop() # enter Tk event loop if __name__ == '__main__': main() 

One Solution collect form web for “Обработка исключенных исключений с помощью Tkinter”

Я прошел через код после report_callback_exception() исключения и обнаружил, что он попадает в report_callback_exception() . Еще несколько поисков привели меня к сообщению, в котором показано, как переопределить report_callback_exception() . Вот мой пример с новым обработчиком. Не забывайте вторую строку в __init__() где вы фактически регистрируете обработчик.

 import Tkinter as tk import tkMessageBox import traceback class MyApp(tk.Frame): def __init__(self, parent, *args, **kwargs): tk.Frame.__init__(self, parent, *args, **kwargs) parent.report_callback_exception = self.report_callback_exception self.parent = parent self.button_frame = tk.Frame(self) self.button_frame.pack(side='top') self.button_run = tk.Button( self.button_frame, text="Run", command=self.run ) self.button_run.grid(row=0, column=1, sticky='W') def run(self): tkMessageBox.showinfo('Info', 'The process is running.') raise RuntimeError('Tripped.') def report_callback_exception(self, exc_type, exc_value, exc_traceback): message = ''.join(traceback.format_exception(exc_type, exc_value, exc_traceback)) tkMessageBox.showerror('Error', message) def main(): root = tk.Tk() # parent widget MyApp(root).pack(fill='both', expand=True) root.mainloop() # enter Tk event loop if __name__ == '__main__': main() 
  • Создайте новый виджет ttk от tkinter
  • Как удалить светло-серая рамка вокруг моего виджета Canvas?
  • Как изменить цвет переднего плана или фона кнопки Tkinter на Mac OS X?
  • Как изменить атрибуты для всех объектов внутри списка в python (3)?
  • Как удалить все из текстового виджета tkinter?
  • Разбор результатов askopenfilenames ()?
  • Изменение текста на ярлыке
  • Tkinter: масштабирование элементов на холсте
  •  
    Interesting Posts for Van-Lav

    Keras: используйте один и тот же слой в разных моделях (весы)

    Python получает неправильное значение для os.environ на 64-битной версии

    сортировать 3D-массив по сумме второго значения

    Автоматически удалять файлы * .pyc и в противном случае – пустые каталоги при проверке новой ветви

    TypeError: object () не имеет параметров с использованием Django-поддоменов

    Создание табуляции отличается от простого пробела

    парсер asn.1 в C / Python

    Может ли EXE, сгенерированный cx_freeze, полностью декомпилироваться обратно в считываемый код Python?

    как сделать git diff текущей фиксации с последней фиксацией с помощью gitpython?

    В чем разница между dict.items () и dict.iteritems ()?

    Как проверить исходный код метода python?

    Большие данные POST повреждены при использовании Django / PyISAPIe / IIS

    Selenium webdriver не может найти элементы в chrome: // загружает

    Инструмент для проверки объектов Python без их изменения

    Как threading.Thread дает остальную часть своего кванта в Python?

    Python - лучший язык программирования в мире.