Форум сайта python.su
63
Решение проблемы :)
Отредактировано 4kpt (Март 2, 2013 01:07:07)
Офлайн
63
Если разделить поток отображения и поток выполнения цикла? Сам не пробовал, но интересно - жуть. Где-то читал, что так решаються некоторые проблемы потока событий. Где не помню. Какие проблемы-тоже не помню. Посему и спросил. Может есть позитивный или негативный опыт?
Отредактировано 4kpt (Март 2, 2013 01:09:24)
Офлайн
0
Если разделить поток отображения и поток выполнения цикла?А как предлагаете обмениваться информацией между потоками?
Может есть позитивный или негативный опыт?Нету, это моё первое весомое приложение на питоне.
Офлайн
63
А как предлагаете обмениваться информацией между потоками?Я пока никак не предлагаю. Просто напрашивается такое решение. Возможно потоки смогут обращаться к одной переменной… Надо смотреть и пробовать. Если перенесете тему в раздел GUI или продублируете - я могу попробовать. Самому, если честно, интересно. Но Ваше решение - это явный бок (без обид :)).
Отредактировано 4kpt (Март 2, 2013 01:20:45)
Офлайн
63
Кстати, забыл сказать.
В этом классе я компоную Entry и Canvas'ы в самодельную таблицу.Чем Вам листбоксы не угодили?
Офлайн
0
Если разделить поток отображения и поток выполнения цикла?Я сейчас ещё подумал над вашим предложением. Мне кажется в моём случае это бессмысленно, т.к. единственная задача цикла - приём коротких сообщений из очереди, уведомляющих об изменениях в GUI.
Отредактировано Dwarf (Март 2, 2013 01:52:40)
Офлайн
0
Чем Вам листбоксы не угодили?У меня несколько столбцов в таблице. Не знаю, умеют ли листбоксы такое.
Офлайн
0
По проблеме №1, описанной в начале этого топика: я заметил, что та функция, с которой убивать интерфейс, имеет значение.
С root.destroy() деструктор конфига нормально срабатывает, а вот с root.quit() - нет. Помогите понять почему.
Офлайн
63
У меня несколько столбцов в таблице. Не знаю, умеют ли листбоксы такое.Ну так соберите их из нескольких виджетов Listbox :)
По проблеме №1, описанной в начале этого топика: я заметил, что та функция, с которой убивать интерфейс, имеет значение.Я Вам об этом написал еще во втором ответе :).
Я сейчас ещё подумал над вашим предложением. Мне кажется в моём случае это бессмысленно, т.к. единственная задача цикла - приём коротких сообщений из очереди, уведомляющих об изменениях в GUI.Весомо… Первое объяснение было более размытым. Нужен код для анализа.
Если я засуну этот цикл в отдельный поток, мне придётся создать очередь (между потоками отображения, и цикла).
А в потоке отображения нужно будет городить ещё один цикл, для постоянного приёма сообщений (другого способа я не знаю).
Получится то же самое, что у меня, только с одним дополнительным звеном.
Может быть проблема №2 (которая с использованием задержки при закрытии, в противовес проблеме №1, которую я описал в первом сообщении этого топика) вызвана тем, что у я использую два класса, отвечающие за интерфейс?Думаю вряд-ли… Мне кажется, здесь другое… Не видя кода…
Может быть стоит перенести функцию с бесконечным циклом из класса Grid в класс Gui, но точно также поднимать флаг-переменную, когда нужно выйти из цикла? Даст ли мне это что-либо?
Отредактировано 4kpt (Март 2, 2013 07:42:31)
Офлайн
0
Ну так соберите их из нескольких виджетов Listbox :)А в чём преимущеста такого подхода? Строки таблицы не расползутся из-ра разной величины ячеек? Я сейчас компоную Entry и Canvas'ы с помощью .grid(), который естественным путём задаёт высоту строк, так что если вддруг одна ячейка расширится по высоте, то все остальные ячейки этой строки - тоже.
Я Вам об этом написал еще во втором ответеДа и заметил и полез эксперементировать.
Отредактировано Dwarf (Март 2, 2013 11:36:12)
Офлайн