Python应用程序在从回调发出信号时崩溃 我使用Qt的Python应用程序中的C++库。它使用回调与UI通信。 我的图书馆是“ts”。问题是我的程序有时会崩溃。 据我所知,调用emit()时会崩溃,但这种情况很少发生。 我的程序的简化版本如下所示: import ts ... class Parser(QObject): sig = Signal(ts.ProgramDescriptions) ts = ts.Ts() def init(self): self.ts.SetProgramChangeCB(SetProgramListCB) ... class Ui_Dialog(QMainWindow): def __init__(self, pars): self.parser = pars ... def SetProgramListCB(programDesc): print "SetProgramListCB" ui.parser.sig.emit(programDesc) def SetProgramList(programDesc): print "SetProgramList" if __name__ == "__main__": import sys app = QApplication(sys.argv) Dialog = QDialog() parser = Parser() parser.init() parser.sig.connect(SetProgramList, Qt.QueuedConnection) parser.Start() ui = Ui_Dialog(parser) ...

Python应用程序在从回调发出信号时崩溃 我使用Qt的Python应用程序中的C++库。它使用回调与UI通信。 我的图书馆是“ts”。问题是我的程序有时会崩溃。 据我所知,调用emit()时会崩溃,但这种情况很少发生。 我的程序的简化版本如下所示: import ts ... class Parser(QObject): sig = Signal(ts.ProgramDescriptions) ts = ts.Ts() def init(self): self.ts.SetProgramChangeCB(SetProgramListCB) ... class Ui_Dialog(QMainWindow): def __init__(self, pars): self.parser = pars ... def SetProgramListCB(programDesc): print "SetProgramListCB" ui.parser.sig.emit(programDesc) def SetProgramList(programDesc): print "SetProgramList" if __name__ == "__main__": import sys app = QApplication(sys.argv) Dialog = QDialog() parser = Parser() parser.init() parser.sig.connect(SetProgramList, Qt.QueuedConnection) parser.Start() ui = Ui_Dialog(parser) ...,python,callback,crash,signals,pyside,Python,Callback,Crash,Signals,Pyside,救命啊 > P>在发现崩溃原因是C++异常(借助PHIHAG)之后,我用这种方式改变了我的代码,并确定了问题: def SetProgramListCB(programDesc): try: print ui.ravisParser.sig ui.ravisParser.sig.emit(programDesc) except: print "Error" 如果工作正常,我有(输出): 这只是周围的GUI代码,极不

救命啊

> P>在发现崩溃原因是C++异常(借助PHIHAG)之后,我用这种方式改变了我的代码,并确定了问题:

def SetProgramListCB(programDesc):        
    try:
        print ui.ravisParser.sig
        ui.ravisParser.sig.emit(programDesc)
    except:
        print "Error"
如果工作正常,我有(输出):


这只是周围的GUI代码,极不可能产生崩溃。听起来问题很像是在您的库中或在
ui.ravisParser.sig.emit
中。您应该在调试器下运行该程序,以获取有关崩溃的详细信息-它的直接原因是什么(例如,在无效地址上读取内存-哪一个?)?对不起,我不太在意,在发布源代码时犯了一些错误。现在我改正了。我是python新手,所以我不知道如何在调试器下运行我的应用程序。你能推荐我吗。我的操作系统是Win7。这个编辑澄清了一点,但问题仍然只包含GUI代码,而不是
解析器中的代码,这可能是错误的。任何调试器都会这样做。例如,分析器是C++的简单包装器,它在TS中提供了调用。调试器显示了这个应用程序崩溃时的情况:(2E4.13A0):C++ EH异常代码E06D7363(第一次机会)(2E4.13A0):C++ EH异常代码E06D7363(!!第二次机会!!!)eax=032eeb34 ebx=004337b8 ecx=00000003 edx=00000000 esi=77ee057c edi=032eebc4 eip=75acd36f esp=032eeb34 ebp=032eeb84 iopl=0 nv up ei pl nz ac po nc=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000212…这是否意味着我在哪里有未捕获的异常?
<PySide.QtCore.Signal object at 0x01DD88C0>
<PySide.QtCore.Signal object at 0x01DD88C0>
<PySide.QtCore.Signal object at 0x01DD88C0>
...
Error
<PySide.QtCore.Signal object at 0x01DD88C0>
<PySide.QtCore.Signal object at 0x01DD88C0>
<PySide.QtCore.Signal object at 0x01DD88C0>
...
parser.sig.connect(SetProgramList, Qt.QueuedConnection)

parser.Start()