我正在尝试使用PySide开发一个gui,我想知道是否有办法在Python(QDate
)中调用函数并在特定的日期和时间运行它?
例如:
#run this function in everyday at 8:00 am.
def print_something():
print "Hello"
答案 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
。