PyQt: свойства через таблицу стилей только для рисования? - PullRequest
0 голосов
/ 12 апреля 2020

Я хотел бы использовать в PyQt5 style sheet для размещения пользовательских виджетов. Обычно это работает: виджеты отображаются с измененными свойствами. Однако свойство виджета (например, style-sheet font-family против QLabel.label()), кажется, остается значением по умолчанию (см. Минимальный пример ниже).

Используется ли таблица стилей только для рисования виджета и не поменять сам виджет? Есть ли способ получить «новые» свойства? В противном случае использование FontMetrics в сочетании с style sheet невозможно?

import sys

from PyQt5.QtWidgets import QApplication, QLabel
from PyQt5.QtGui import QFontInfo

stylesheet = '''
QLabel{
    font-family: Wingdings;
}
'''

app = QApplication(sys.argv)
label = QLabel('Hello World!')
label.setStyleSheet(stylesheet)
print(QFontInfo(label.font()).family())  # prints out: MS Shell Dlg 2; expected: Wingdings
label.show()
app.exec()

1 Ответ

0 голосов
/ 12 апреля 2020

Ваш подозрение действительно верен: при использовании таблиц стилей многие свойства виджетов игнорируются, и для их методов получения и установки.

Нет прямого способа узнать эти значения, так как они все управляются изнутри парсером Qt.

Самое главное, что palette() и font() (как fontMetrics(), очевидно) не затронуты, поэтому вы не можете знать, какие свойства шрифта или цвета палитры используется для таблицы стилей, и если вы попытаетесь установить шрифт или установить новую палитру, вы не получите результата (все это при условии, что вы действительно устанавливаете какой-либо цвет или шрифт в таблице стилей, очевидно).

Это также верно для других c свойств виджета (например, стиля рамки QFrame), которые могут даже иметь немного отличающиеся результаты в разных стилях / системах.

Это также причина, по которой Вы должны использовать таблицы стилей или QPalette, так как их смешивание может привести к непредвиденному поведению.

С QWidget.palette() документы:

Предупреждение : Не используйте эту функцию вместе с таблицами стилей Qt.

С QWidget.font() документы:

Примечание : Если таблицы стилей Qt используются в том же виджете, что и setFont (), таблицы стилей будут иметь приоритет в случае конфликта настроек.

...