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

2024-05-16 18:57:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

wxPython有办法在背景中构建一个框架吗?我不介意强制用户等待一段时间,然后才能显示它,但是由于它现在正在构建表单,占用了事件循环,所以一切都变得没有响应。如果我使用线程来构建表单,它会成功地完成,但是当我调用.Show()时,什么都不会发生,也不会出现错误消息。你知道吗

可以想象,这样的GUI有相当复杂的代码,所以很难显示SSCCE(而且它不是开源的)。如果需要的话,我可以尝试拼凑一些可以近似我的问题的东西。你知道吗


Tags: 项目用户gt应用程序图形表单列表matplotlib
2条回答

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

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

Mike使用wxBusyInfo的想法在某些事情需要很长时间的时候很有用,但是你可以让它花费更少的时间(或者至少也可以)。你知道吗

首先,在向wxChoice中插入许多项(虽然我不会说100是那么多,但1000肯定是)时,在添加它们之前freeze它,然后thaw它。这将大大减少插入所需的时间。你知道吗

第二,即使在C++中,创建多页^ {< CD3>}(或另一个^ {CD4>})的所有控件都可以是长的。因此,我们的想法是不立即这样做,而只是创建您最初将要向用户显示的页面的控件。然后仅当用户将要选择其他页控件时,即在wxEVT_BOOKCTRL_PAGE_CHANGING事件处理程序中创建它们。你知道吗

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

相关问题 更多 >