2012-08-29 124 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