wxPython BusyInfo 小部件不再有效

wxPython BusyInfo widget no longer works

在我的 wxPython GUI 中,wx.BusyInfo 小部件不再有效。我正在 OSX 工作,最近升级到 El Capitan。

下面这个简单的代码不再适用于我可用的任何一个 wx 版本(“3.0.2.0”或“2.9.2.4”)。据我所知,wx.BusyInfo 不再显示了。不幸的是,我不知道小部件何时停止出现。

class MyFrame(wx.Frame):

    def __init__(self, parent, title):
        super(MyFrame, self).__init__(parent, size=(450, 350))
        self.panel = wx.Panel(self)

        btn = wx.Button(self.panel, wx.ID_ANY, "Do thing")
        self.Bind(wx.EVT_BUTTON, self.do_thing)
        self.Centre()
        self.Show()

    def do_thing(self, event):
        wait = wx.BusyInfo('Please wait...')
        time.sleep(5)
        del wait

关于此问题的原因或解决方案的任何想法?

似乎在处理繁忙信息 window 的绘制事件方面可能发生了一些变化。您所看到的只是在您的 sleep 完成后才交付绘画事件。如果你在忙碌之前给它一个机会来绘制它(比如之前调用 wx.Yield(True)),那么你应该会看到它像早期版本的 OSX 一样工作。更好的是,如果您可以组织您的繁忙任务,使其定期产生,那么系统可以做一些事情,比如保持忙碌信息面板更新,并显示一个真正忙碌的光标而不是旋转的沙滩球。

我测试了建议的“收益”解决方法。

我也试过使用“WindowDisabler”,但没用。

我的创可贴修复是刷新 wx.BusyInfo 本身,而不是更新它。

例如(在Python):

busy=wx.BusyInfo("Loading corresponding data.")
#then do some work.

busy=wx.BusyInfo("Processing data for display.") #instead of busy.UpdateLabel("text")
#then do some different work.

#work done, time to let the BusyInfo object go.
del busy