2013-07-08 27 views
1

我试图制作一个使用QTimer创建状态机的GUI,但是当我关闭GUI窗口时定时器继续。我认为我正确地将创建我的Qtimer的对象创建为GUI的一个子项,但是我看到它的行为并不像它。下面是一些代码在PyQt4中关闭GUI是否会销毁其子Qobjects

class Ui_Form(QtGui.QWidget): 
    def __init__(self): 
     super(Ui_Form, self).__init__() 
     self.backEnd = BackEnd(self) 
     self.backEnd.start() 


class BackEnd(QtCore.QObject): 
    def __init__(self,parent=None): 
     super(BackEnd,self).__init__(parent) 
     self.setParent(parent) 
     self.timer = QtCore.QTimer() 
     self.timer.setSingleShot(True) 
     QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.timerHandler) 


    def timerHandler(self): 
     print "Im here" 
     self.timer.start(1000) 

    def start(self): 
     self.timer.start(1000) 

    def stop(self): 
     self.timer.stop() 

if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    Form = QtGui.QWidget() 
    ui = Ui_Form() 
    ui.setupUi(Form) 
    Form.show() 
    sys.exit(app.exec_()) 

回答

0

定时器不继续当我关闭GUI窗口,它工作正常,根据需要...无论如何,尝试重写关闭事件为您Ui_Form这样的:

def closeEvent(self): 
    self.backEnd.stop() 

我希望有所帮助。

而且,我已经改变了你的主要是这样的:你的情况

if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    ui = Ui_Form() 
    ui.show() 
    sys.exit(app.exec_()) 

它可能是Form = QtGui.QWidget()保持您关闭GUI窗口后还活着。所以先尝试一下修改。