在固定时间杀死申请

时间:2015-06-03 12:23:04

标签: python timer pyqt4 terminate

我正在使用PyQt4开发一个应用程序。我想在当天的固定时间(比如说晚上11点)终止这个应用程序。在杀死应用程序之前,我想保存一些东西。我正在做如下的事情:

def main():
    app = PyQt4.QtGui.QApplication(sys.argv)
    form = MainWindow()
    form.show()
    app.exec_()

这里MainWindow的定义如下:

class MainWindow(PyQt4.QtGui.QMainWindow):
    ...

我不知道该怎么做。有人能指出我正确的方向(或可能提供代码片段)吗?

2 个答案:

答案 0 :(得分:0)

您可以检查当前时间是否已超过预定时间(您无法真正检查时间相等)并让MainWindow自行关闭:

if datetime.datetime.now().time() > datetime.time(hour = 23):
    self.close()

然后通过重载closeEvent拦截关闭事件并在那里保存:

def closeEvent(self, event):
    # do some stuff
    event.accept()

答案 1 :(得分:0)

您可以使用单次定时器在固定时间调用主窗口的close()插槽,然后使用closeEvent保存数据。

必须注意确保计时器没有给出负或零间隔。如果应用程序在下午12点开始并且将在晚上11点(即第二天)完成,则可能会发生这种情况。

这是一个简单的演示脚本:

from PyQt4 import QtCore, QtGui

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        time = QtCore.QTime(23, 0, 0)
        now = QtCore.QDateTime.currentDateTime()
        then = QtCore.QDateTime(now.date(), time)
        if now.time() > then.time():
            then = then.addDays(1)
        print('started at: %s' % now.toString())
        msec = now.msecsTo(then)
        if msec > 0:
            print('finishing at: %s' % then.toString())
            QtCore.QTimer.singleShot(msec, self.close)

    def closeEvent(self, event):
        print('saving at: %s' % QtCore.QDateTime.currentDateTime().toString())
        # if saving failed, you could prevent closure
        # by calling event.ignore() here

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.setGeometry(50, 50, 200, 200)
    window.show()
    sys.exit(app.exec_())