Когда разрабатываете свой 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
📰New UI for Calls
The only change that can be seen in the first release of the 10.5.0 beta version for Android is the Updated Telegram Calls interface.
Although its interface has been updated, some items are still not added in the calls (for example, Rate the Call or Choose the Speaker)
#Calls | #Beta v10.5
👉The TG Times
https://developers.facebook.com/docs/facebook-login/access-tokens#apptokens
When someone connects with an app using #Facebook Login, the app will be able to obtain an access token which provides temporary, secure access to Facebook APIs.
An access #token is an opaque string that identifies a user, app, or Page and can be used by the app to make graph API #calls. Access tokens are obtained via a number of methods, each of which are covered later in this document. The token includes information about when the token will expire and which app generated the token. Because of privacy checks, the majority of #API calls on Facebook need to include an access token.
Channel: SMS Activation Updates
Members: ~5.32K
💢 Username: @virtualnumbersforverification
Description:
Your source for news and updates on virtual numbers for SMS and Calls. Keep up with trends and get exclusive offers from PrivatePhoneBot.
🏷 Tags: #other
#virtual_numbers#sms#calls#voip#sms_activation
https://telegramchannels.me/channels/virtualnumbersforverification
https://docs.python.org/3/library/asyncio-eventloop.html
#Calls
Most #asyncio functions don’t accept keywords. If you want to pass #keywords to your callback, use #functools.partial(). For example, #loop.#call_soon(functools.partial(print, "Hello", flush=True)) will call print("Hello", flush=True).
#Note
functools.partial() is better than lambda functions, because asyncio can inspect functools.partial() object to display parameters in debug mode, whereas lambda functions have a poor representation.
BaseEventLoop.call_soon(callback, *args)
Arrange for a callback to be called as soon as possible. The callback is called after call_soon() returns, when control returns to the event loop.
This operates as a FIFO queue, callbacks are called in the order in which they are registered. Each callback will be called exactly once.
Any positional arguments after the callback will be passed to the callback when it is called.
An instance of asyncio.Handle is returned, which can be used to cancel the callback.
Use functools.partial to pass keywords to the callback.
BaseEventLoop.call_soon_threadsafe(callback, *args)
Like call_soon(), but thread safe.
See the concurrency and multithreading section of the documentation.