栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

防止PyQt沉默插槽中发生的异常

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

防止PyQt沉默插槽中发生的异常

可以创建一个包装PyQt的新信号/插槽装饰器的装饰器,并为所有插槽提供异常处理。也可以重写QApplication :: notify来捕获未捕获的C
++异常。

import sysimport tracebackimport typesfrom functools import wrapsfrom PyQt4 import QtGui, QtCoredef MyPyQtSlot(*args):    if len(args) == 0 or isinstance(args[0], types.FunctionType):        args = []    @QtCore.pyqtSlot(*args)    def slotdecorator(func):        @wraps(func)        def wrapper(*args, **kwargs): try:     func(*args) except:     print "Uncaught Exception in slot"     traceback.print_exc()        return wrapper    return slotdecoratorclass Test(QtGui.QPushButton):    def __init__(self, parent=None):        QtGui.QWidget.__init__(self, parent)        self.setText("hello")        self.clicked.connect(self.buttonClicked)    @MyPyQtSlot("bool")    def buttonClicked(self, checked):        print "clicked"        raise Exception("wow")class MyApp(QtGui.QApplication):    def notify(self, obj, event):        isex = False        try: return QtGui.QApplication.notify(self, obj, event)        except Exception: isex = True print "Unexpected Error" print traceback.format_exception(*sys.exc_info()) return False        finally: if isex:     self.quit()app = MyApp(sys.argv)t=Test()t.show()try:    app.exec_()except:    print "exiting"


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610563.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号