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