Когда разрабатываете свой 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
⚡️Toshkent — IV Osiyo yoshlar oʻyinlari mezboni
Bahraynda oʻtkazilgan Osiyo Olimpiya Kengashining 101-Ijroiya qoʻmitasi yigʻilishida Toshkent 2029-yilgi IV Osiyo yoshlar oʻyinlariga mezbonlik qilishi haqida qaror qabul qilindi.
Bugun III Osiyo yoshlar oʻyinlarining tantanali yopilish marosimida bu haqida rasman e’lon qilindi. Demak, Oʻzbekiston yana 4 yildan keyin qit’amizning eng kuchli yosh sportchilarini oʻzida jamlaydi.
—
⚡️Ташкент примет IV Азиатские юношеские игры
Исполком Олимпийского совета Азии, заседание которого прошло в Бахрейне, принял решение доверить Ташкенту проведение IV Азиатских юношеских игр 2029 года.
Об этом официально объявили сегодня на торжественной церемонии закрытия III Азиатских юношеских игр. Таким образом, уже через четыре года Узбекистан станет площадкой для сильнейших молодых спортсменов Азиатского континента.
#Toshkent2029
👉@OlympicUz
olympic.uz I YouTube I Instagram I
Xayr, Bahrayn! Salom, Toshkent!
Bahraynda III Osiyo yoshlar oʻyinlarining tantanali yopilish marosimi boʻlib oʻtdi. Ahamiyatlisi, mazkur tadbirda Toshkent 2029-yil IV Osiyo yoshlar oʻyinlarini qabul qilishi rasman e’lon qilindi.
Marosimda Sport vaziri oʻrinbosari Shahrullo Mahmudov, Toshkent shahar hokimi oʻrinbosari Durdona Rahimova, shuningdek, MOQ rahbariyati ishtirok etdi.
Tadbirda mamlakatimiz nomidan Osiyo Olimpiya kengashi (OOK) vitse-prezidenti, Oʻzbekiston MOQ raisining birinchi oʻrinbosari Otabek Umarov Oʻyinlarning kelgusi mezboni sifatida rasmiylardan OOKning bayrogʻini qabul qilib oldi.
—
Прощай, Бахрейн! Здравствуй, Ташкент!
В Бахрейне состоялась торжественная церемония закрытия III Азиатских юношеских игр. Примечательно, что в ходе этого мероприятия было официально объявлено, что Ташкент примет IV Азиатские юношеские игры в 2029 году.
В церемонии приняли участие заместитель Министра спорта Шахрулло Махмудов, заместитель хокима города Ташкента Дурдона Рахимова, а также руководство Национального Олимпийского комитета.
От имени нашей страны в качестве будущего хозяина Игр в мероприятии участвовал вице-президент Олимпийского совета Азии, первый заместитель председателя Национального Олимпийского комитета Узбекистана Отaбек Умаров, который принял флаг ОСА из рук официальных представителей.
#Bahrayn2025#Toshkent2029
👉@OlympicUz
olympic.uz I YouTube I Instagram I
Osiyo Olimpiya kengashi (OOK) vitse-prezidenti, Oʻzbekiston MOQ raisining birinchi oʻrinbosari Otabek Umarov OOK bayrogʻini qabul qildi
—
Вице-президент Олимпийского совета Азии (ОСА), первый заместитель председателя Национального Олимпийского комитета Узбекистана Отабек Умаров принял флаг ОСА
#Bahrayn2025#Toshkent2029
👉@OlympicUz
olympic.uz I YouTube I Instagram I
Toshkentda Osiyo Olimpiya kengashining 46-Bosh Assambleyasi bo‘lib o‘tdi
Poytaxtimiz Toshkent shahrida Osiyo Olimpiya kengashining 46-Bosh Assambleyasi bo‘lib o‘tdi. Nufuzli anjumanda Osiyo Olimpiya kengashi va unga a’zo Milliy Olimpiya qo‘mitalari vakillari, Xalqaro Olimpiya qo‘mitasi hamda yetakchi sport tashkilotlarining rahbarlari, shuningdek, O‘zbekiston Respublikasi Sport vazirligi, Milliy Olimpiya va Paralimpiya qo‘mitalari rahbariyati ishtirok etdi.
—
В Ташкенте состоялась 46-я Генеральная Ассамблея Олимпийского совета Азии
В Ташкенте прошла 46-я Генеральная Ассамблея Олимпийского совета Азии. В работе престижного форума приняли участие представители Олимпийского совета Азии и входящих в его состав Национальных Олимпийских комитетов, главы Международного Олимпийского комитета и ведущих спортивных организаций, а также руководство Министерства спорта Республики Узбекистан, Национальных Олимпийского и Паралимпийского комитетов.
#OOK#BoshAssambleya#Toshkent2029
👉@OlympicUz
olympic.uz I YouTube I Instagram I