我有一个带有多阶段GUI的wxPython应用程序。首先,一个简单的表单弹出,用于从许多(> 100)选项中进行选择(这是一个带有搜索框的部件编号列表)。一旦用户进行了选择,它就会生成适当的表单并显示出来,隐藏初始选择对话框。由于这个项目的性质,每个次要表单在一个Notebook中都有几个matplotlib图形,每个都有7或8个图形,每个都有2-5个轴。因此,表单从初始化到在屏幕上显示都需要几秒钟的时间。
wxPython有在后台构建框架的方法吗?我不介意强迫用户等待一段时间才能显示出来,但由于现在正在构建表单,事件循环就会变得毫无响应。如果我使用一个线程来构建表单,它就会成功地完成,但是当我调用.Show()时,什么都不会发生,也没有错误消息。
可以想象,这样的GUI代码相当复杂,因此很难显示SSCCE (而且它不是开源的)。如果需要的话,我可以尝试破解一些类似我的问题的东西。
发布于 2014-02-20 22:46:33
我以前使用过BusyInfo来告诉用户某些事情正在发生。在实际开始创建matplotlib图形之前,您应该将其放在框架的init()中。你可以在这里读到:
另一个想法是创建第二个框架,其中包含一个进度条和一个消息。进度条将被设置为来回弹跳,当您完成创建matplot的东西时,您将关闭第二个帧。
发布于 2014-02-21 01:01:59
当某些事情需要很长时间时,Mike使用wxBusyInfo的想法是有用的,但是您可能会让它花费更少的时间(至少也可以)。
首先,当将许多项插入到wxChoice中(尽管我不会说100是那么多,但一定是1000个)时,在添加它们之前先插入冰冻,然后再添加它们,然后再添加解冻。这将大大减少插入所需的时间。
其次,创建多页wxNotebook (或另一个wxBookCtrl)的所有控件可能很长,甚至在C++中也是如此。因此,我们的想法是不立即这样做,而只是创建您最初要向用户显示的页面的控件。然后,只在用户即将选择其他页面时(即在wxEVT_BOOKCTRL_PAGE_CHANGING事件处理程序中)创建其他页面控件。
如果你把这个放好了,你可能不再需要wxBusyInfo了.
https://stackoverflow.com/questions/21919583
复制相似问题