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

时间:2014-02-20 21:05:48

标签: python matplotlib wxpython wxwidgets

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

wxPython是否有办法在后台构建框架?我不介意强迫用户在显示之前等待一会儿,但是正如现在构建表单一样,事件循环并且一切都变得没有响应。如果我使用线程来构建表单,它会成功完成,但是当我调用.Show()时没有任何反应,并且没有错误消息。

可以想象,这样的GUI具有相当复杂的代码,因此很难显示SSCCE(并且它不是开源的)。如果需要,我可以尝试将可能与我的问题近似的东西混在一起。

2 个答案:

答案 0 :(得分:2)

我之前使用过BusyInfo告诉用户发生了什么事。在实际开始创建matplotlib数字之前,你会把它放在你的框架的 init ()中。你可以在这里阅读:

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

答案 1 :(得分:0)

迈克使用wxBusyInfo的想法在需要花费很长时间的时候很有用,但是你可能会花费更少的时间(或者至少也是如此)。

首先,当在添加它们之前插入许多(虽然我不会说那100个是那么多,但是肯定是1000个)项目wxChoicefreeze - 并且{{3之后它。这应该大大减少插入所需的时间。

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

如果你把它放到位,你可能不再需要wxBusyInfo ......