Когда разрабатываете свой GUI с помощью PyQt для какого-либо софта бывает необходимо позаимствовать цвета из текущего стиля интерфейса. Например, чтобы правильно раскрасить свои виджеты, подогнав их по цвету. Ведь бывает, что ваш GUI используется в разных софтах. Причём некоторые со светлой темой а другие с тёмной.
По умолчанию стили наследуются, но если вы задаёте какую-либо раскраску для части виджета через свой styleSheet, то требуется ссылаться на цвета текущего стиля.
Как это сделать? Как получить нужный цвет из палитры имеющегося стиля? Это достаточно просто, нужно использовать класс QPalette и его роли.
Например, мне нужно достать цвет текста из одного виджета и применить его в другом как цвет фона (не важно зачем именно так, просто захотелось😊).
Получаем палитру виджета и сразу достаём нужный цвет, указав его роль.
from PySide2.QtGui import QPalette
color = main_window.palette().color(QPalette.Text)
теперь можем использовать этот цвет в стилях
my_widget.setStyleSheet(f'background-color: {color.name()};')
Готово, мы динамически переопределили дефолтный стиль используя текущий стиль окна!
На самом деле есть запись покороче, в одну строку и без лишних переменных. Не очень-то по правилам CSS, но Qt это понимает.
my_widget.setStyleSheet('background-color: palette(Text);')
Этот способ не подходит если вам нужно как-то модифицировать цвет перед применением в своих стилях. В этом случае потребуется первый способ.
Зато он прекрасно сработает в файле .qss, то есть не придётся в коде прописывать раскраску отдельных элементов через ссылки на палитру, всё красиво сохранится в отдельном файле .qss!
QListView#my_widget::item:selected {
background: palette(Midlight);
}
Про имеющиеся роли можно почитать здесь🌍
#qt#tricks
#idioms
💥Let the 'side down (BrE)
○to disappoint your
family, friends, team, etc. by not being as
successful as they expect, or not helping or
supporting them.
☆ John would never let the side down.
☆ I knew I was letting the side down (=
disappointing my family, etc.) by not going to
college.
#idioms
💥Water off a duck's back
○criticism or unpleasant things have no effect on someone; they don't take it personally.
▪️ No matter how much they criticize her, it's like water off a duck's back — she just keeps going.
▪️ He laughed off all the negative comments, letting them be water off a duck's back.
#idioms
💥A BOOTLICKER
🔅Someone who flatters or obeys others in power to gain favour.
▪️Jeff is such a bootlicker, always agreeing with the boss no matter what.
#idioms
☆Crunch time
•The period of time just before a project has to be completed and everyone has to work hard .
●I’m not getting much sleep these days,
because it’s crunch time at work.
#idioms
☆Run on fumes
•To continue to stay awake when feeling exhausted .
●I really have to take a nap now. I haven’t slept for twenty hours and I’m
running on fumes.
#idioms
⚜Turn the clock back
●to return to a situation that existed in the past; to return to
old-fashioned methods or ideas.
●This new law is
an attempt to turn the clock back.
#idioms
💥 leave sb to their own devices
▪️to leave sb alone to do as they wish.
🔅Once I’ve explained things to him I tend to leave him to his own devices.
#Idioms
💢To pull out all the stops
♠️To make every possible effort to get something done
Ex:- The company pulled out all the stops to advertise their new product.
#idioms
💥in a bind | fix | jam
⚜If someone is in a bind, or in a jam, or in a fix, they're in a bad or difficult situation.
⚡️Jimmy's in a bind because he owes a lot of money to some mafia guys, and he hasn't got it.