基本上我正在使用 toasterbox,并且我希望代码运行一次,假设每 30 秒运行一次。每 30 秒 toastr 就会弹出一次。代码如下所示
event = threading.Event()
#############################################
bWidth = 200
bHeight = 100
tb = TB.ToasterBox(self, TB.TB_COMPLEX, TB.DEFAULT_TB_STYLE, TB.TB_ONTIME)
tb.SetPopupSize((bWidth,bHeight))
tb.SetPopupPosition((1600-bWidth,900-bHeight))
tb.SetPopupPauseTime(4000)
tb.SetPopupScrollSpeed(8)
##############################################
while true:
showPopup(tb,name,amount,progress,link)
tb.Play()
event.wait(30)
这应该会给你一个想法。无论如何,出现的问题是, toastr 弹出,但 tb.play() 不会阻塞,因为它生成一个计时器来处理动画,因此线程立即继续等待函数并阻塞,因此 toastr 永远不会关闭。有没有办法更改播放代码以使其阻塞?或者有更好的方法来做到这一点。我尝试创建一个新线程来运行 tb.play() ,但它抛出了一个只能从主线程运行的错误。有关 toastr 盒的更多信息,包括此处的来源:Toasterbox
最佳答案
您使用的这个 toastr 是什么? wxPython 中包含了一个。看到这里http://xoomer.virgilio.it/infinity77/AGW_Docs/toasterbox_module.html#toasterbox或这里http://www.wxpython.org/docs/api/wx.lib.agw.toasterbox.ToasterBox-class.html
我认为 agw 不支持阻止,我猜您正在使用的也不支持。您可以在 wxPython 邮件列表上询问他们是否可以修补其版本或有更好的建议。就我个人而言,我会使用 wx.Timer 来弹出 toastr 。这应该可以在没有线程的情况下解决你的问题。这里有一个如何使用计时器的示例:http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/
关于python - ToasterBox 的问题,你能 join() 一个计时器或强制一个线程等待计时器在 python 中完成吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7407075/