我编写了一个函数来检查每个用户指定的更新时间,如果有的话,显示有关它的通知消息。 我的代码:
.htaccess
我的问题是它只显示一次通知,之后它没有做任何事情,包括执行更新功能。我用打印指令替换 call_function()进行测试,一切正常,因此调用该函数会造成麻烦。
答案 0 :(得分:1)
问题是你的show_notification()函数。这一行:
notification_bubble.MainLoop()
仅在窗口关闭后才会完成。所以发生的事情是,一旦调用了show_notification()函数,就会进入循环,等待用户关闭窗口。但如果他这样做,那么该程序就会退出。所以不可能不止一次调用show_notification()。
wxPython Documentation on MainLoop()
我对wxPython了解不多,但我希望你可能需要进入线程。
您可以为每个通知启动一个新线程,如下所示:
import threading
def show_notification():
notification_bubble = wx.App()
wx.adv.NotificationMessage("", "sample notification").Show()
notification_bubble.MainLoop()
def update():
# retrieve var from newest_porcys_url_imported
first_porcys_url = newest_porcys_url_imported()
# retrieve var from newest_pitchfork_url_imported
first_pitchfork_url = newest_pitchfork_url_imported()
# fetch newest review url with get_porcys_review_url
get_latest_porcys_url_ = get_porcys_review_url()
get_latest_porcys_url = get_latest_porcys_url_[0]
# fetch newest review url with get_pitchfork_review_url
get_latest_pitchfork_url_ = get_pitchfork_review_url()
get_latest_pitchfork_url = get_latest_pitchfork_url_[0]
a = first_porcys_url + ' ' + get_latest_porcys_url
b = first_pitchfork_url + ' ' + get_latest_pitchfork_url
get_datetime = datetime.now()
hour = str(get_datetime.hour)
minutes = str(get_datetime.minute)
f = open('log.txt', 'a')
f.write(hour + ':' + minutes + ' ' + a + ' ' + b + '\n')
f.close()
if first_porcys_url != get_latest_porcys_url or first_pitchfork_url != get_latest_pitchfork_url:
print('new reviews')
f = open('new reviews.txt', 'a')
f.write(hour + ':' + minutes + ' ' + a + ' ' + b + '\n')
f.close()
return True
else:
notificationThread = threading.Thread(target=show_notification)
# Prepare the thread
notificationThread.daemon = True
# Make shure it will run in the background
notificationThread.start()
# Start the thread
return False
这样,每个通知都是后台进程,而主程序可以继续运行。
我希望我能提供帮助。祝你有愉快的一天!
答案 1 :(得分:1)
您必须将整个内容包装到mainloop
中:
这个简单的应用程序创建一个阻止消息,如果你想要一个非阻塞或自我取消的消息,这是一个完全不同的鱼!@ / p>
import wx
import time
def Alerts(x):
#Do your stuff here rather than sleeping
time.sleep(2)
dlg = wx.MessageBox("New Message "+str(x),"My message heading",wx.OK | wx.ICON_INFORMATION)
if __name__ == "__main__":
A1 = wx.App()
#This could be a while True loop
for x in range(10):
Alerts(x)
A1.MainLoop()