2009-12-26 21 views

Respuesta

2

palillo de tratar todas partes exceptúa su aplicación puede bloquearse (E/S, redes, etc). Siempre que se llame a una excepción, llame a una función que matará a la ventana anterior, generará una nueva ventana de notificación de tkinter o un custom one con su mensaje de error.

Haga una raíz.Después de la nueva ventana y envíe su informe de error (urllib).

Ponga un botón de reinicio si lo desea.

No existe una estructura de informes de fallas, ya que tkinter no es ese tipo de GUI. Es más o menos un envoltorio para aplicaciones simples de línea de comandos.

Vaya pyqt/gtk o wxpython si desea las funciones que se ven en la captura de pantalla anterior. Pero estoy bastante seguro de que donde sea que vayas, tendrás que escribir tu propio reportero.

+5

No estoy de acuerdo con la afirmación de que tkinter es "más o menos un envoltorio para aplicaciones de línea de comandos simples". Tkinter es una completa biblioteca GUI adecuada para todo tipo de propósitos. Y, de hecho, Tkinter también se puede usar para implementar todas las características en la captura de pantalla. –

+0

No estoy en desacuerdo, pero si tuviera que hacer una GUI completa y fácil de mantener (con informes de fallos e hilos), con la menor cantidad de esfuerzo, uno usaría uno de los otros kits de herramientas que enumeré anteriormente. La razón por la que existen es porque Tkinter no satisface esta necesidad de manera adecuada. – torger

7

En lugar de contaminar su código con try..except en todas partes, solo debe implementar su propio gancho excepto configurando sys.excepthook. Aquí está un ejemplo:

import sys 
import traceback 

def install_excepthook(): 
    def my_excepthook(exctype, value, tb): 
     s = ''.join(traceback.format_exception(exctype, value, tb)) 
     dialog = ErrorReportDialog(None, s) 
     dialog.exec_() 

    sys.excepthook = my_excepthook 

llamada install_exception() cuando su aplicación se inicia.

ErrorReportDialog es un diálogo de Qt que he hecho. traceback.format_exception() formateará el argumento pasado al gancho excepto de la misma manera que lo hace en el intérprete de Python.

EDITAR: Olvidé mencionar un poco de eso. No funciona con hilos (bueno, al menos no fue la última vez que lo comprobé). Para el código que se ejecuta en otro hilo, deberá envolverlo en un bloque try..except.