我正在使用PyQt4开发一个应用程序。我想在当天的固定时间(比如说晚上11点)终止这个应用程序。在杀死应用程序之前,我想保存一些东西。我正在做如下的事情:
def main():
app = PyQt4.QtGui.QApplication(sys.argv)
form = MainWindow()
form.show()
app.exec_()
这里MainWindow的定义如下:
class MainWindow(PyQt4.QtGui.QMainWindow):
...
我不知道该怎么做。有人能指出我正确的方向(或可能提供代码片段)吗?
答案 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_())