wxPython BusyInfo小部件不再有效

时间:2015-11-30 21:02:57

标签: python wxpython

在我的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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

我也尝试过使用“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