1

我正在尝试制作一个使用 QTimer 创建状态机的 GUI,但是当我关闭 GUI 窗口时,计时器会继续。我认为我正在正确地使创建我的 Qtimer 的对象成为 GUI 的子对象,但我看到的行为看起来并不像它。这是一些代码

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_())
4

1 回答 1

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 窗口后仍然存在。所以先试试那个修改。

于 2013-07-09T16:21:10.873 回答