2012-03-30 3 views
0

Я столкнулся с проблемой, когда я пытаюсь использовать Wxpython + OpenCV для реализации распознавания лиц.wxpython бесконечное обновление панели вызвать программу свернуть

В принципе, моя идея - это графический интерфейс, содержащий обнаруженные кадры и две кнопки. Один для начала, а другой для остановки. Я использую панель в качестве контейнера для отображения каждого кадра и бесконечно обновляю панель в течение очень небольшого интервала времени.

Но когда я запускаю программу, если я нажму кнопку «Пуск», программа рухнет на 2 секунды. И кнопка остановки кажется бесполезной еще до того, как программа рухнет.

Я думаю, что проблема с потоком. Поскольку весь пользовательский интерфейс представляет собой большой цикл, и если мне нужно обновить один из компонентов, скажем, панель, все время, мне нужно использовать разные потоки отдельно от основного потока.

Это правильно? Если да, как мне это сделать? Если нет, пожалуйста, дайте мне дополнительные подсказки.

спасибо миллион ~! ;)

ответ

1

Вы не должны обновлять, если только не нужно. Освежающий излишне не путь. Обновляйте только когда что-то меняется. Если вы используете поток для обновления компонента GUI wxPython, то вам нужно обязательно использовать wfPython-потоковые методы, например wx.CallAfter, wx.CallLater или wx.PostEvent. См любое из следующих действий для получения дополнительной информации о резьб и WxPython:

+0

Большое спасибо. Ваш ответ очень полезен для меня, особенно первый: http://wiki.wxpython.org/LongRunningTasks –

+0

wxPython также имеет удобный модуль для запуска многопоточных задач: 'wx.lib.delayedresult'. Я понятия не имею, почему это все время опущено. – Fenikso

+0

Потому что я всегда забываю об этом;) –