进一步继续之前的一些系统信息:
平台:Mac OS X 10.7.1
Python版本:ActiveState Python 2.7.1
wxPython版本:wxPython2.9-osx-cocoa-py2.7
我希望在执行任务时更改按钮标签
所以,这就是我所做的/想要的:
self.run_button=wx.Button(self.panel,ID_RUN_BUTTON,label='Install')
self.Bind(wx.EVT_BUTTON, self.OnRun,id=ID_RUN_BUTTON)
def OnRun(self,evt):
self.run_button.SetLabel('Installing..')
#call a function that does the installation task
installation_task()
#After task completion, set the button label back to "Install"
self.run_button.SetLabel('Install')[/code]
当我尝试这样做时,它不会在执行任务时将标签设置为“正在安装”。有什么建议我如何实现这个目标?
答案 0 :(得分:2)
按钮永远不会有机会用新标签重绘自己,因为你在GUI线程上运行逻辑(installation_task())。
您需要在后台线程上运行installation_task(),这样就不会锁定GUI。
答案 1 :(得分:2)
您正在运行的“installation_task”函数正在阻止GUI的主循环。您需要使用线程更新标签,这意味着您需要学习wxPython的线程安全方法。请参阅以下文章:http://wiki.wxpython.org/LongRunningTasks或http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/