Как я могу сделать тихие исключения громче в tkinter?Python

Программы на Python
Ответить
Anonymous
 Как я могу сделать тихие исключения громче в tkinter?

Сообщение Anonymous »

Если я запущу следующий код из терминала, я получу полезное сообщение об ошибке в терминале:

Код: Выделить всё

import Tkinter as tk

master = tk.Tk()

def callback():
raise UserWarning("Exception!")

b = tk.Button(master, text="This will raise an exception", command=callback)
b.pack()

tk.mainloop()
Однако, если я запускаю его без терминала (скажем, дважды щелкнув значок), сообщение об ошибке подавляется.

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

Как мне с этим справиться? Существует ли стандартный способ отображения обратных трассировок, ошибок stderror или чего-то еще в приложении Tkinter? Я ищу что-то более элегантное, чем везде использовать try/кроме.

РЕДАКТИРОВАТЬ: Йохен Ритцель дал отличный ответ ниже, в котором появляется всплывающее окно с предупреждением, и упомянул о прикреплении его к классу. Просто чтобы прояснить это:

Код: Выделить всё

import Tkinter as tk
import traceback, tkMessageBox

class App:
def __init__(self, master):
master.report_callback_exception = self.report_callback_exception
self.frame = tk.Frame(master)
self.frame.pack()
b = tk.Button(
self.frame, text="This will cause an exception",
command=self.cause_exception)
b.pack()

def cause_exception(self):
a = []
a.a = 0 #A traceback makes this easy to catch and fix

def report_callback_exception(self, *args):
err = traceback.format_exception(*args)
tkMessageBox.showerror('Exception', err)

root = tk.Tk()
app = App(root)
root.mainloop()
Мое оставшееся замешательство: Йохен упоминает о возможности наличия разных функций отчетов об исключениях в разных фреймах. Я пока не понимаю, как это сделать. Это очевидно?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»