2012-08-29 123 views
0

我正在嘗試使用wxpython爲我的gui可執行文件設置初始屏幕。基本上我正在做的是首先加載一堆數據庫。然後我建立了我的wx GUI窗口。這兩個過程大約需要35秒。wxpython和初始屏幕

當我啓動代碼時,我想要一個啓動畫面來顯示並保持到GUI啓動並運行(35秒後)。

我看過這樣的:How to adapt my current splash screen to allow other pieces of my code to run in the background?

這並不完全幫助,因爲我加載我的WX代碼超出了我的數據庫。

例如:

Imports 
Database loading 
class (my wx) 

我做數據庫加載WX之外,因爲我有多個類引用的數據庫。我是相當新的python - 所以請容易對我:)

任何幫助設置啓動屏幕啓動之前我的數據庫加載和停止時,我的圖形用戶界面在wx加載?謝謝!

+0

您可以將數據庫加載到一個線程中,並使用一個變量(例如一個計數器),這個變量在數據庫加載時將會增加,並且您的啓動畫面將讀取該變量,直到完成所有操作爲止。 –

+0

^你不應該這樣做,最好使用wx.CallAfter來更新GUI,它更容易,更不容易出錯。 – dav1d

+0

我一直在閱讀有關wx.CallAfter,但不知道我將如何實現它。你有什麼建議嗎? – mcfly

回答

3

我認爲你會對此稍加反思。將數據庫加載到框架的初始化或wx.App中。但在加載之前,請顯示啓動畫面。然後進行加載。然後,當加載完成後,進行GUI加載並在到達Frame的Show()方法之前,關閉啓動畫面。

+0

這聽起來不錯,但是數據庫(變量和列表)能夠用於所有其他類嗎?例如,我有大約4個不同的類,它們都訪問相同的變量/列表。這就是爲什麼我的數據庫加載在我的.py文件的開頭,而不是在特定的類裏面 – mcfly

+0

我不知道你的代碼是如何安排的。我通常將我的數據庫代碼放入一個model.py文件中,並在開始時加載它,然後使用導入所有其他類的控制器訪問它。我的醫療項目可能會爲您提供一些線索:https://bitbucket.org/driscollis/medialocker。我還在這裏寫了一個早期版本:http://www.blog.pythonlibrary.org/2011/11/10/wxpython-and-sqlalchemy-an-intro-to-mvc-and-crud/ –

+0

在我的代碼中,我喜歡使用[pubsub](http://wiki.wxpython.org/WxLibPubSub)來處理數據庫I/O,因爲模塊化是設計需求。我用我的框架初始化我的數據庫,但所有其他數據庫調用都是通過pubsub消息完成的。這樣我的班級甚至不需要知道我的數據庫是否存在,只需要如何請求和接收數據。請記住pubsub消息是異步的! – acattle