wxpython中EVT_BUTTON上的按钮标签更改?

时间:2011-08-29 01:09:02

标签: python button wxpython label

进一步继续之前的一些系统信息:

平台: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]

当我尝试这样做时,它不会在执行任务时将标签设置为“正在安装”。有什么建议我如何实现这个目标?

2 个答案:

答案 0 :(得分:2)

按钮永远不会有机会用新标签重绘自己,因为你在GUI线程上运行逻辑(installation_task())。

您需要在后台线程上运行installation_task(),这样就不会锁定GUI。

答案 1 :(得分:2)

您正在运行的“installation_task”函数正在阻止GUI的主循环。您需要使用线程更新标签,这意味着您需要学习wxPython的线程安全方法。请参阅以下文章:http://wiki.wxpython.org/LongRunningTaskshttp://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/