基本上,我使用的是toasterbox,并且我想运行代码,可以说每30秒运行一次。那么每30秒,烤箱就会弹出。代码看起来像这样

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)


那应该给你一个主意。无论如何,发生的问题是,烤面包机弹出了,但是tb.play()没有阻塞,因为它产生了一个定时器来处理动画,因此线程立即继续执行等待功能并阻塞,因此烤面包机永远不会关闭。有没有办法更改播放代码以使其阻塞?还是有更好的方法来做到这一点。我尝试创建一个新线程来运行tb.play(),但是它引发了一个错误,那就是只能从主线程运行。有关烤面包机盒的更多信息,包括在此处找到的来源:Toasterbox

最佳答案

您正在使用什么烤面包机? 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弹出烤面包机。那应该在没有线程的情况下解决您的问题。这里有一个如何使用计时器的示例:http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/

07-24 13:47