PySide,Qdate;每天在特定时间运行特定功能

时间:2016-04-11 15:28:48

标签: python qt pyqt pyside

我正在尝试使用PySide开发一个gui,我想知道是否有办法在Python(QDate)中调用函数并在特定的日期和时间运行它?

例如:

#run this function in everyday at 8:00 am. 
def print_something():
    print "Hello"

1 个答案:

答案 0 :(得分:0)

这是一个改编自Summerfield的PyQt书第4章的脚本,他的alert.py例子。它在网上免费提供: http://www.informit.com/articles/article.aspx?p=1149122

基本上你设置了一个目标QDateTime,然后你可以通过将目标与currentQDateTime进行比较来触发你想要的任何可调用目标:

from PySide import QtCore, QtGui
import sys
import time

#Prepare alarm
alarmMessage = "Wake up, sleepyhead!"
year = 2016
month = 4
day = 23
hour = 12
minute = 40    
alarmDateTime = QtCore.QDateTime(int(year), int(month), int(day), int(hour), int(minute), int(0))   
#Wait for alarm to trigger at appropriate time (check every 5 seconds)
while QtCore.QDateTime.currentDateTime() < alarmDateTime:
    time.sleep(5)

#Once alarm is triggered, create and show QLabel, and then exit application
qtApp = QtGui.QApplication(sys.argv)
label = QtGui.QLabel(alarmMessage)
label.setStyleSheet("QLabel { color: rgb(255, 0, 0); font-weight: bold; font-size: 25px; \
                     background-color: rgb(0,0,0); border: 5px solid rgba(0 , 255, 0, 200)}")
label.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.WindowStaysOnTopHint)
label.show()
waitTime = 10000  #in milliseconds
QtCore.QTimer.singleShot(waitTime, qtApp.quit) 
sys.exit(qtApp.exec_())

这个人在你想要的日期和时间弹出一个QLabel,但这是任意的。你可以让它做你想做的任何事情。如果您希望它每天同时运行,您必须适当地修改它,但这应该足以让您开始使用QDateTime来触发事件。

请注意,如果您在Windows中工作并且想要在后台运行它,而不在屏幕上显示命令窗口,请按照此处的建议进行操作:

How can I hide the console window in a PyQt app running on Windows?

即,使用.pyw扩展程序保存该程序,并确保其与pythonw.exe一起运行,而不是python.exe