RodegastВозможно. Я (как писал выше) - новичок в Python-е. Какое смог придумать решение - такое и реализовал. Может есть лучшее.
У меня такое ощущение что ты что то не то делаешь.
Задача у меня: Надо отображать в реальном времени поток текстовых данных (строк переменной длины) в отдельном окне (отдельном от главного окна; независимо управляемом; немодальном; и чтобы все возможности управления сохранялись даже если в главном окне открыт модальный диалог). Строки могут генериться не только GUI-потоком, но и любым другим потоком (thread-ом) приложения. Общая скорость потока строк может быть довольно высокой - до десятка МБ/сек (а может даже выше?). Должна сохраняться история (массив строк) не менее чем 300тыс. строк, лучше - больше. Отображение должно происходить в реальном времени: идёт поток и в это же время пользователь должен иметь возможность таскать окно по всей сохранённой истории потока, от начала до конца. И должен иметь возможность пристыковать его к концу потока с обновлением текущими данными. Без тормозов и артефактов! Длительность работы в таком режиме - неограничена (хоть несколько суток непрерывно). Этот процесс (управление и отображение в окне) должен минимально влиять на работу основного окна (а лучше - вообще не влиять никак). Это окна логгинга реалтайм-событий в программе. Точнее - логгинг обмена с внешним девайсом с парсингом в текстовый формат. С сохранением потока на диск.
Реалтаймовость обновления данных (когда окно отображает текущий хвост потока) должна быть не хуже чем ~0.1сек.
Поэтому - чтобы вся работа с массивом строк (добавление, обрезка истории массива, сохранение на диск, etc.) минимально влияла на GUI-поток, реализовал так: События ресайзинга окна обрабатываются в GUI-потоке; вычисляется новый размер окна (в столбцах/строках по X/Y); а также - положение слайдеров прокрутки по X/Y; этот размер+положение передаётся в поток, занимающийся массивом строк; а он уже вырезает из хранимого массива нужный фрагмент текста и отправляет его на отображение в GUI-поток. Таким образом - GUI-поток не тормозит, чем бы не занимался поток работы со строками.
Да - текст в окне многоцветный (в потоке текста есть команды управления цветностью, а также ещё некоторые команды).
Работает сейчас всё прекрасно - ничего не тормозит и не морозится в главном окне и в окне лога. Загрузка CPU = ~10% - вполне приемлемо. Была только одна эта проблема с моноширинным текстом. (точнее есть ещё одна, но не такая существенная).
ЗЫ: Функционал записи потока на диск пока не реализовал. Реализую позже. В ещё одном thread-е скорее всего.