• 12
  • Dec

准备在Ubuntu Tweak中实现一个功能,即崩溃提示功能。出现问题不能正常运行,也得弹出个窗口嘛。

看了些文章,实际上实现这个也不难,对主函数进行try....catch...,然后把出错信息给弹出来就可以了。

这里要应用到trackback和StringIO了。

import StringIO
import traceback

if __name__ == "__main__":
    try:
        gobject.threads_init()
        launcher = TweakLauncher()
        launcher.main()
    except:
        output = StringIO.StringIO()
        exc = traceback.print_exc(file = output)
        worker = GuiWorker('traceback.glade')
        dialog = worker.get_widget('FatalErrorDialog')
        textview = worker.get_widget('message_view')
        buffer = textview.get_buffer()
        buffer.set_text(output.getvalue())
        dialog.run()
        dialog.destroy()
        output.close()

上面的代码取自Ubuntu Tweak的开发分支。

实际上很简单,利用traceback将错误信息保存至文件的功能,再利用StringIO建立一个StringIO,把traceback信息存到这个“文件”当中,然后弹出的对话框中就可以用这个了。

效果如图:

100% Python的Trackback信息,用户只要把这个信息粘贴、报道就OK了。虽然从终端也可以获得,但明显GUI的形式更好,因为还可以点击“是”把内容直接提交呢!

补充一下有关StringIO的信息:另外还有一个cStringIO,是用C实现的,速度更快。可惜,不支持Unicode。

Tags: GTK, Python.

» You can leave a comment.

5 Comments

  1. 弱国tualatrix可以完善一下ubuntu-tweak for fedora就好了...
    就是差那个源编辑的功能....或许这是yum和apt的差别吧...
    或者把整个项目转变为gnome-tweak..........
    只是建议,或者是妄想....

  2. Yewanth

    不支持楼上的,先把ubuntu-tweak做好了再考虑gnome-tweak吧

  3. Knight

    听说C实现的模块能快1000倍~~跑起来差别大么?

Leave a Comment