【问题标题】:wxpython and splash screenwxpython 和闪屏
【发布时间】:2012-08-29 15:14:56
【问题描述】:

我正在尝试使用 wxpython 为我的 gui 可执行文件设置启动画面。基本上我正在做的是首先加载一堆数据库。然后我设置了我的 wx GUI 窗口。这两个过程大约需要 35 秒。

当我启动代码时,我希望显示一个启动屏幕并一直显示,直到 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 中的 GUI 加载时停止有任何帮助吗?谢谢!

【问题讨论】:

  • 您可以将数据库加载放到一个线程中并使用一个变量(例如一个计数器),该变量将随着数据库的加载而增加,并且您的初始屏幕将读取该变量,并显示仪表,直到一切都完成.
  • ^ 你不应该这样做,最好使用 wx.CallAfter 来更新 GUI,它更容易,更不容易出错。
  • 我一直在阅读有关 wx.CallAfter 的信息,但不确定如何实现它。你有什么建议吗?

标签: python wxpython splash-screen


【解决方案1】:

我认为你在这方面有点倒退。将数据库的加载放入框架或 wx.App 的 init 中。但在加载之前,请显示启动画面。然后进行加载。然后在加载完成后,进行 GUI 加载,并在到达 Frame 的 Show() 方法之前,关闭启动画面。

【讨论】:

  • 这听起来不错,但是数据库(变量和列表)是否也可以在所有其他类中使用?例如,我有大约 4 个不同的类,它们都访问相同的变量/列表。这就是为什么我在 .py 文件的开头而不是在特定类中加载数据库的原因
  • 不知道你的代码是怎么排列的。我通常将我的数据库代码放入一个 model.py 文件并在开始时加载它,然后使用我的控制器访问它,该控制器被导入到所有其他类中。我的 medialocker 项目可能会给你一些线索:bitbucket.org/driscollis/medialocker。我还在这里写过一个早期版本:blog.pythonlibrary.org/2011/11/10/…
  • 在我的代码中,我喜欢使用pubsub 来处理 DB I/O,因为模块化是设计要求。我用我的框架初始化我的数据库,但所有其他数据库调用都是通过 pubsub 消息完成的。这样我的课程甚至不需要知道我的数据库是否存在,只需要知道如何请求和接收数据。请记住,发布订阅消息是异步的!
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 2012-08-04
  • 2013-07-02
  • 1970-01-01
相关资源
最近更新 更多