LINUX.ORG.RU

[Python] Tkinter и thread - нефига не кроссплатформенная смесь?

 


0

1

Есть некое клиент серверное приложение на питоне. Клиент при передаче/приеме файла с сервера (через сокет) отображает прогресс передачи в отдельной модальной форточке. Ф-я передачи в цикле дергает куски из файла, пропихивает их через сокет (увы мне, чем с самбой колдовать проще сделать ручками) и вызывает некую ф-ю которая собственно меняет содержимое форточки (точнее метки на форточке). Что бы форточка могла обновляться ф-я передачи запскается в отдельном треде (через thread.start_new_thread), затем форточка настраивается и для ее родителя вызывается wait_window.

Дальше кино - пока клиент под линуксом, все работает прекрасно. Как только клиента запускаем под виндой, или из под питона к-й из под вайна - все виснет при изменении метки в форточке. Как бы это побороть? Менять дизайн (напр. вместо треда юзать after) категорически не хочется - ф-я передачи файла как бы из другой библиотеки и к форточкам вообще не привязана никак, а отображать прогресс необходимо, т.к. файлы иногда ну очень здоровые...

***************************************************************************************

Побороть оказалось неожиданно просто - повесил вызов ф-ии передачи на after (что бы иметь возможность открыть форточку) и после каждого обновления метки стал вызвать update - все работает и там и там. Тем не менее некое любопытство по поводу кроссплатформенности осталось, + не оч понятно с т.з. высших соображений - какое из решений более Ъ? ;-)

★★★★★

Последнее исправление: AIv (всего исправлений: 1)

Скорее всего, такая же проблема как и с gtk. Главный цикл не потокобезопасен, для этого там есть специальные функции. То есть, нельзя из других потоков дергать гуйню. Потоки развязываются, обычно, через события. То есть, твой вариант с after.

// Повторюсь, с tkinter знаком мало, поэтому это всего лишь домыслы.

baverman ★★★
()
Ответ на: комментарий от baverman

Скорее всего, такая же проблема как и с gtk. Главный цикл не потокобезопасен

Это вообще особенность большинства гуёвых тулкитов. С qt то же самое вроде.

anonymous
()
Ответ на: комментарий от baverman

Да, судя по всему именно так. Смутно вспоминается что под виндой форточки с многопоточностью недружат и приходится с бубном плясать...

Спасибо!

AIv ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.