wxpython threading textctrl исчезает до тех пор, пока файлы не будут обработаны

Соответствующий код приведен ниже. У меня это работало один раз, но с тех пор я испортил из-за необходимости изменить часть другого кода. Не могу понять, что я сделал. Функция шифрования создает поток и вызывает функцию EncryptProc для обработки одного или нескольких файлов. Как только каждый файл будет завершен, он должен напечатать имя в textctrl. В текущем состоянии кода он ждет, пока все потоки/файлы не будут обработаны перед печатью. Затем он печатает все за один раз. Во время обработки textctrl также полностью исчезает. Любая помощь будет высоко оценена, так как она начинает сводить меня с ума, лол.

---РЕДАКТИРОВАТЬ--- КОД УДАЛЕН


person Clinton Moffat    schedule 11.08.2013    source источник


Ответы (1)


Не должно быть доступа к графическому интерфейсу из потоков - в вашем случае EncryptProc напрямую пишет в текстовый элемент управления - вам нужно:

  1. Используйте CallAfter в потоке, чтобы обновить текстовый элемент управления после выхода из потока или
  2. Поднимите пользовательское событие в потоке, которое несет информацию об имени файла и имеет обработчик в основном потоке, который обновляет текстовый элемент управления при получении события.
person Steve Barnes    schedule 11.08.2013
comment
Привет, Стив. Я обновил приведенный выше код, теперь используя CallAfter. Все еще вызывает ту же проблему. Любые идеи? - person Clinton Moffat; 12.08.2013
comment
Стив, я должен добавить. Просто попытался удалить все экземпляры, которые печатают в textctrl, и снова запустил программу. textctrl по-прежнему полностью исчезает, пока файлы не будут обработаны. Клинтон. - person Clinton Moffat; 12.08.2013
comment
Привет, Стив. Теперь все в порядке. Я обновил код выше. Да, именно CallAfter исправил эту работу для меня. Большое спасибо! Клинтон. - person Clinton Moffat; 12.08.2013