Получить имя переменной Qt Widget (для использования в таблице стилей)? - PullRequest
3 голосов
/ 24 января 2012

В моем приложении пользователь нажимает на любой виджет моей программы (который в данный момент неактивен) и выбирает для него цвет.
Этот цвет будет добавлен в таблицу стилей для этого конкретного виджета.

Однако, когда программа заканчивается и запускается снова, я бы хотел, чтобы этот конкретный виджет сохранил свою таблицу стилей.
Мне бы не хотелось жестко кодировать таблицы стилей для каждого виджета.На самом деле, я бы даже не знал, какой именно виджет имеет таблицу стилей.

Что я действительно хотел бы сделать, так это создать единую таблицу стилей для приложения и кодировать новый цвет только для выбранного виджета.

(т.е. если пользователь нажал наQPushButton и выбрал таблицу стилей {color: red},
Я бы хотел, чтобы просто THAT QPushButton red и ничего другого.
Итак, если у этого QPushButton было переменное имя Clicky,
для приложений QApplicationsТаблицу стилей я бы добавил:
'QPushButton # Clicky {color: red}')

Чтобы сделать это и не нужно жестко кодировать его для каждого виджета,
Я должен каким-то образом преобразовать переменнуюимя моих виджетов PyQt4 в виде строк.
Как я могу это сделать?

Спасибо!

(я читал, что очень трудно получить имена переменных Python из их значений;
Есть ли другая форма идентификатора для виджета, которую можно добавить в таблицу стилей?)


PyQt4
python 2.7.2
Windows 7

1 Ответ

7 голосов
/ 24 января 2012

Вам нужно сначала установить setObjectName ("somename") перед тем, как объект будет назван, затем будет работать objectName (), или даже лучше - findChild () или findChildren ()

Пример

Заголовок:

QButton foo;

Класс:

foo = new QButton();
foo.setObjectName("MySuperButton");

Тогда, наконец, в вашем QSS ..

#MySuperButton { 
     background: black;
}

Это также работает аналогично CSS с

QButton#MySuperButton {
     background: red;
}

Логика того, почему вы хотите установить несколько имен объектов одинаково (для разных объектов) или использовать гранулярность только одного типа виджетов с определенным именем, также в значительной степени совпадает с CSS.

...