2011-09-13 10 views
1

基本的に私はtoasterboxを使用しています。 30秒ごとにトースターボックスがポップアップします。コードは次のようになりますToasterBoxの問題は、タイマーに参加させたり、スレッドがタイマーでPythonで終了するのを待たせることができますか?

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

答えて

2

使用しているこのトースターボックスは何ですか? wxPythonには1つが含まれています。ここをクリックhttp://xoomer.virgilio.it/infinity77/AGW_Docs/toasterbox_module.html#toasterboxまたはここにhttp://www.wxpython.org/docs/api/wx.lib.agw.toasterbox.ToasterBox-class.html

私はagw1がブロッキングをサポートしていないと思いますし、使用しているものを推測しています。 wxPythonのメーリングリストで、自分のバージョンにパッチを当てるか、より良い提案ができるかどうかを確認することができます。個人的には、wx.Timerを使用してトースタをポップアップさせます。スレッドなしで問題を処理する必要があります。ここでタイマーを使用する方法の例があります:http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/

関連する問題