Как я могу получить высоту QListWidgetItem в QListWidget в PyQt?

#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 . Прошу прощения за то, что не указал на это раньше, но я предположил из вашего первоначального вопроса, что вы уже знали об этом.