Показать сообщение отдельно

  #10  
Старый 15.12.2009, 23:57
Chubakur
Познающий
Регистрация: 06.04.2009
Сообщений: 69
С нами: 8998764

Репутация: 39
По умолчанию

Для того чтобы научится питону я попытался написать граббер картинок. То есть запускаешь скрипт, он просит ввести url страницы, ты его пишешь. И программа начинает скачивать оттуда все картинки и сохранять их в папку, которая называется именем сайта откуда скачиваешь. После этого я решил в качестве тренировки дополнить это GUI, для этого я заюзал GTK, и сразу же столкнулся с проблемой. Сам интерфейс выглядит просто, сверху окно для ввода URL, ниже кнопка, ниже окно куда выводится лог. После того как я ввожу url и жму на кнопку, форма зависает. И только после того как все картинки закачаются. Форма развисает, и лог в окне написан уже целиком. Насколько я понимаю, проблема в том, что при нажатии на кнопку у меня выполняется функция-обработчик которая все качает, и поэтому GTK неактивно. То-есть функция обработчик вызывает другие функции, и ждет пока они выполнятся. Я решил, что можно тогда из под обработчика функции вызывать не напрямую, а с передачей управления, например call. Однако , похожих команд для питона я не нашел. Каким образом можно решить эту проблему, чтобы интерфейс стал динамическим ? То-есть закачка производилась как бы в фоне. Например, скачалась картинка - добавилась строчка лога. И так до конца программы.

P.S. Кстати, я тут придумал как решить это извращенным способом. При нажатии на кнопку будет менятся значение булевой переменной, также будет таймер, который каждые n миллисекунд вызывает функцию. Функция эта будет проверять:
if значение_переменной_true:
тормозим таймер, и начинаем выполнять все те функции, сбрасываем значение переменной
else
return


Сильно ли это отразится на производительности?

Последний раз редактировалось Chubakur; 16.12.2009 в 00:29..
 
Ответить с цитированием