#size #pyqt #qlistwidget
#размер #pyqt #qlistwidget
Вопрос:
На самом деле, как я могу извлечь размер элементов графического интерфейса в целом в PyQt?
Пока я нашел только sizeHint
упоминание о размерах в PyQt.
Кто-нибудь может объяснить, как работает sizes в PyQt?
Ответ №1:
В общем, невозможно гарантировать точные размеры виджетов, потому что в игру вступает так много разных факторов. Виджеты будут отображаться по-разному в зависимости от используемого оконного менеджера, текущего стиля графического интерфейса, шрифтов и т. Д. — И каждая платформа имеет свои особенности.
Чтобы лучше понять все это, я бы посоветовал вам взглянуть на собственные обзоры геометрии окон, виджетов и макетов Qt и управления макетами.
Чтобы ответить на конкретный вопрос о высоте QListWidgetItems: они будут иметь любую высоту, вычисляемую QListWidget при размещении своих элементов. Это может учитывать элементы sizeHint
, которые могут быть установлены программно с помощью QListWidgetItem.setSizeHint .
Комментарии:
1. Я согласен, концепция размера в рамках GUI не является тривиальной. Но в моем примере, однако, это очень просто. Я хочу, чтобы размер всплывающего окна (
QListWidget
сQt.Popup
установленным флагом) соответствовал точному размеру его строк.2. @c00kiemonster. Вы имеете в виду, как a
QCompleter
? Было бы полезно, если бы вы добавили в свой вопрос некоторый код, который демонстрирует проблемы, с которыми вы столкнулись. Я вижу, как настройка ширины нетривиальна, но установка высоты кажется довольно простой.3. Да, установка высоты тривиальна, но получить высоту элемента было сложнее. После долгого просмотра документов я нашел способ. Это некрасиво, но я получаю желаемый результат:
w.rectForIndex(w.indexFromItem(w.item(0))).height()
сw
QListWidget
помощью .4. @c00kiemonster. Извините, я имел в виду установку общей высоты виджета списка. Рад, что вы нашли решение. Не совсем уверен, что вы пытаетесь сделать, но я думаю, что вы, возможно, пропустили что-то более простое: QAbstractItemView.sizeHintForRow . Прошу прощения за то, что не указал на это раньше, но я предположил из вашего первоначального вопроса, что вы уже знали об этом.