Изменение метки кнопки на EVT_BUTTON в wxpython? - PullRequest
3 голосов
/ 29 августа 2011

Некоторая информация о системе, прежде чем продолжить:

Платформа: 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 ]

2 голосов
/ 29 августа 2011

Функция "installation_task", которую вы запускаете, блокирует основной цикл графического интерфейса. Вам нужно обновить метку, используя потоки, а это значит, что вам нужно изучить поточно-безопасные методы wxPython. Смотрите следующие статьи: http://wiki.wxpython.org/LongRunningTasks или http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/

2 голосов
/ 29 августа 2011

Кнопка никогда не получает возможности перерисовать себя с новой меткой, потому что вы запускаете свою логику (installation_task ()) в потоке GUI.

Вам нужно запустить instal_task () в фоновом потоке, чтобы не блокировать графический интерфейс.

...