Ограничения по размеру Tkinter Grid Manager - PullRequest
0 голосов
/ 22 июня 2011

Я пишу приложение на Python для анализа списка двоичных файлов, агрегирования статистики по содержащимся в них данным и вывода результатов. Я могу легко вывести эти результаты в виде файла .tsv, но эта программа написана для удобства моих коллег, поэтому я стараюсь, чтобы она отображала результаты в новом окне, чтобы иногда не открывать файл в Excel , Сейчас я в основном встраиваю фрейм Tkinter в прокручиваемый холст и добавляю в сетку меньшие фреймы, содержащие метки данных, во фрейм. (Меньшие кадры необходимы для выравнивания всех границ с линиями сетки; в противном случае они сокращаются, чтобы соответствовать меткам)

Этот подход работает с сотнями столбцов и, возможно, десятью строками. Но когда я начинаю увеличивать количество строк до сотен, я начинаю сталкиваться со странными проблемами. Программа может перестать отвечать на запросы, новое окно может не отображаться, и все метки, а не нарисованные в сетке, все размещаются в верхнем левом углу моего экрана. Поскольку это кажется проблемой, связанной с масштабированием, мне интересно, просто ли я перегружаю диспетчер сетки десятками тысяч элементов, которые нужно разместить. Таким образом, у меня есть два вопроса: 1) Могу ли я столкнуться с такими ограничениями или проблема в другом месте, и 2) Есть ли лучший способ реализовать отображение таблицы, подобное Excel, в Tkinter, которое позволяет избежать этих проблем?

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Я написал тестовую программу для отображения данных двумя способами: один раз с использованием фрейма и сетки и один раз для рисования текста непосредственно на холсте.

Используя технику фрейма + сетки, производительность 100 строк умножается на 10колонны были вполне приемлемы.Когда я увеличил число строк до 200, производительность была более чем в 2 раза хуже, а к тому времени, когда я достиг 300 строк, производительность стала непригодной.И под этим я подразумеваю, что для начального отображения потребовались десятки секунд.Как только окно появилось, производительность была приемлемой.

Рисование текстовых элементов непосредственно на холсте, производительность была значительно лучше.Я мог отобразить 300 строк на 10 столбцов, и начальное отображение было почти мгновенным.Производительность все еще была приемлемой, когда у меня было 1000 строк с 100 столбцами, на запуск у меня уходило 2-3 секунды.

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

1 голос
/ 22 июня 2011

Менеджер геометрии сетки сталкивается с проблемами, когда все становится больше; он не предназначен для работы с очень большим количеством подокон (т. е. с тем, что вы хотите масштабировать за пределы того, что вы можете комфортно иметь без прокрутки). Вместо этого вы ищете TkTable . Это может быть расширено до обработки очень больших табличных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...