管理长GUI构建时间的策略(wxPython)



我有一个带有多阶段GUI的wxPython应用程序。首先弹出一个简单的表格,用于从众多(>100)选项中进行选择(这是一个带有搜索框的零件号列表)。一旦用户做出选择,它就会构建适当的表单并显示它,从而隐藏初始选择对话框。由于该项目的性质,每个二级窗体在Notebook中都有几个matplotlib图形,每个图形大约有7或8个,每个图形有2-5个轴。因此,表单从初始化到可以在屏幕上显示需要几秒钟的时间。

wxPython有办法在后台构建一个框架吗?我不介意强迫用户等待一小段时间才能显示,但由于现在正在构建表单,因此占用了事件循环,所有内容都变得没有响应。如果我使用线程来构建表单,它会成功完成,但当我调用.Show()时,不会发生任何事情,也不会出现错误消息。

可以想象,这样的GUI有相当复杂的代码,因此很难显示SSCCE(而且它不是开源的)。如果需要的话,我可以试着想出一些能解决我问题的方法。

我以前使用过BusyInfo来告诉用户发生了什么事情。在实际开始创建matplotlib图形之前,您可以将其放入框架的init()中。你可以在这里阅读:

  • http://wiki.wxpython.org/BusyInfo

另一个想法是创建第二个框架,其中包含进度条和消息。进度条会被设置为来回反弹,当你完成了matplot的创建后,你会关闭第二帧。

Mike使用wxBusyInfo的想法在某些事情需要很长时间时很有用,但也有可能使其花费更少的时间(或者至少同样如此)。

首先,当在wxChoice中插入许多(尽管我不会说100就是那么多,但1000绝对是)项目时,在添加它们之前将其冻结,然后解冻。这将大大减少插入所需的时间。

其次,创建多页wxNotebook(或另一个wxBookCtrl)的所有控件可能很长,即使在C++中也是如此。因此,我们的想法是不要立即执行,而只创建最初要向用户显示的页面的控件。然后,仅当用户要选择其他页面控件时,即在wxEVT_BOOKCTRL_PAGE_CHANGING事件处理程序中创建这些控件。

如果你把它放在适当的位置,你可能不再需要wxBusyInfo了。。。

最新更新