python3 tkinter: можно ли получить рваные сетки без выровненных столбцов? - PullRequest
0 голосов
/ 24 мая 2019

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

Справочная информация: есть сервер (не веб-сервер), который хочет представить пользователям много информации и позволить им редактировать ее. Он должен посылать информацию, которую (относительно) тупой клиент Python использует для заполнения окна. Только для чтения поля являются метками. Поля, как правило, являются однострочными виджетами Entry, но некоторые являются многострочными. Есть несколько кнопок, флажков и выпадающих. Асинхронно сервер также может обновлять виджеты, добавлять их и удалять их. В некоторых случаях представлены таблицы, к которым пользователь должен иметь возможность добавлять и удалять строки.

Настоящая проблема в том, что макет плотный и хаотичный. Первая строка может содержать 3 выпадающих поля. Следующим может быть 20 коротких ярлыков. Следующим может быть одно длинное поле ввода, и тогда мне может понадобиться две таблицы (разной длины) рядом, а затем и т. Д. В зависимости от ввода пользователем внешних факторов, виджеты, строки или целые таблицы могут быть динамически добавлен или исчез.

Я рассмотрел Grid, но он непригоден для использования. Строка с единственным длинным виджетом записи расширяет первый столбец и тем самым выталкивает 12 из 13 столбцов в следующем ряду прямо из окна.

Я рассмотрел Place, но это приложение будет работать на 3 разных операционных системах, и пользователи смогут выбирать свои собственные шрифты, поэтому я никогда не получу правильные позиции. Если бы был какой-то способ спросить у виджета, насколько он велик, я бы с радостью воспользовался этим, чтобы вычислить мои собственные макеты в пикселях, но, очевидно, невозможно задать размер виджета, пока ПОСЛЕ того, как он был выложен менеджером геометрии, что, конечно, слишком поздно.

Так что я думаю, что у меня остался Pack, где каждая строка - это свой собственный фрейм, а в некоторых из этих строк есть таблицы (сетки). Но меня беспокоит, что это означает, что для рендеринга нужно много-много кадров, а некоторые пользователи используют старое, медленное оборудование. Плюс ... это выглядит просто сложным.

Мне не хватает лучшего способа? С сеткой было бы хорошо, если бы я мог убедить ее прекратить попытки выстроить столбцы в ряд. Место было бы хрустящим, но хорошо, если бы я мог заранее определить размер каждого виджета. Действительно ли размещение в большом количестве кадров - лучшее, что у меня есть?

1 Ответ

0 голосов
/ 01 июня 2019

Краткий ответ, лучшего способа нет;и количество кадров недостаточно велико, чтобы вызвать проблемы с производительностью;поэтому генерация кадра в строке - вот что работает.

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