2013-07-08 30 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窗口後還活着。所以先嚐試一下修改。