2013-09-16 5 views
0

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

Я разместил изображение в строке состояния программы. Моя проблема в этом. У меня возникают проблемы при попытке вызова калибровочного импульса, независимо от того, где я размещаю код, который он либо запускает быстро, либо останавливается, либо работает на правильной скорости в течение нескольких секунд, а затем останавливается.

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

Я не думаю, что я мог бы использовать wx.CallAfter, поскольку это победит точку. Импульс нужно назвать, пока процесс работает, а не после факта. Также попробовал usin time.sleep (2), который также не очень хорош, поскольку он замедляет процесс, чего я хочу избежать. Даже при использовании time.sleep (2) у меня остались те же проблемы.

Любая помощь будет оценена по весу!

progress_bar.Pulse() 

ответ

2

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

Если вы используете что-то, что на самом деле не разрешает куски, например создание большого PDF-файла с fop, то я полагаю, вы могли бы использовать wx.Timer(), который просто сигнализирует датчику пульсировать так часто. Затем, когда поток завершится, он отправит сообщение, чтобы остановить объект таймера от обновления датчика.

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

+0

Спасибо за ответ Майк. Приложение - это только мой проект. ! st программа, которую я когда-либо пытался написать. Это программа шифрования файлов для Linux, поэтому длительный процесс будет связан с шифрованием файла. Увеличьте размер файла дольше. Для небольших файлов это почти мгновенно, но после тестирования приложения с некоторыми более крупными файлами стало очевидно, что мне нужен какой-то загруженный объект, чтобы позволить пользователю knwo что-то происходит. Thansk для ссылок. Я уже посмотрел на них. –

+0

Threading кажется довольно сложным процессом только для создания индикатора выполнения. Посмотрите на wx.Timer, который мог бы выполнить эту работу, если бы я просто запустил индикатор выполнения. –

+0

Да ... Основная причина использования потоковой передачи - сохранить длительный процесс блокирования основного цикла потока GUI, который заставит ваше приложение выглядеть замороженным. Вероятно, я должен был связать мой учебник по таймеру, поэтому здесь вы найдете: http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/ –