Регулярно приходится писать и ревьюить код, где используется PySide2-6.
Заметил, что в подавляющем большинстве случаев настройка создаваемых базовых виджетов происходит через методы. Думаю, всем знаком такой способ.
Простой пример с кнопкой:
button = QPushButton("Click Me")
button.setMinimumWidth(300)
button.setFlat(True)
button.setStyleSheet("font-size: 20pt")
button.setToolTip("Super Button")
button.clicked.connect(lambda: print("Button clicked"))
Но есть и альтернативный способ - настройка через свойства. Это просто ключевые аргументы конструктора класса. Хоть они и не указаны в документации как аргументы, но они есть)
Этот код делает тоже самое но с помощью Property
button = QPushButton(
"Click Me",
minimumWidth=300,
flat=True,
styleSheet="font-size: 20pt",
toolTip="Super Button",
clicked=lambda: print("Button clicked"),
)
Где это может быть полезно
▫️ Это выглядит более аккуратно и коротко, уже повод использовать
▫️ Может использоваться в заполнении лейаута, когда нам не нужно никакое другое взаимодействие с виджетом и поэтому сохранять его в переменную не требуется. Например, лейбл или кнопка.
widget = QWidget(minimumWidth=400)
layout = QHBoxLayout(widget)
layout.addWidget(QLabel("Button >", alignment=Qt.AlignRight))
layout.addWidget(QPushButton("Click Me", clicked=lambda: print("Button clicked")))
widget.show()
Либо так
widget = QWidget(minimumWidth=400)
layout = QHBoxLayout(widget)
for wd in (
QLabel("Button >", alignment=Qt.AlignRight),
QPushButton("Click Me", clicked=lambda: ...)
):
layout.addWidget(wd)
widget.show()
▫️ Можно хранить настройки в каком-то конфиге или генерировать на лету, после чего передавать как kwargs.
kwargs = {"text": "Hello " * 30, "wordWrap": True}
my_label = QLabel(**kwargs)
Как получить полный список доступных свойств?
Эта функция распечатает в терминал все свойства виджета и их текущие значения
def print_widget_properties(widget):
meta_object = widget.metaObject()
for i in range(meta_object.propertyCount()):
property_ = meta_object.property(i)
property_name = property_.name()
property_value = property_.read(widget)
print(f"{property_name}: {property_value}")
#tricks#qt
🛒Представили Play Service TrustedTime API
Для тех приложений, которым важно получать настоящее время, а не то, что установлено на устройстве пользователем, всегда приходилось решать вопрос, откуда его взять. Теперь же появилось стандартизированное API.
// Создаем клиента для работы с Trusted Time API
val initializeTrustedTimeClientTask: Task =
TrustedTime.createClient(activity)
val trustedTimeClient: TrustedTimeClient =
initializeTrustedTimeClientTask.await()
val curTime: Long? = trustedTimeClient.computeCurrentUnixEpochMillis()
// Используем системное время, если нет возможности получить из TrustedTime API
// Может не подойти в вашем случае
?: System.currentTimeMillis()
Поддерживается Android 5.0 и выше (SDK 21+)
#google#gms#android
🏝Play Integrity API: Защита вашего приложения от злоумышленников
Play Integrity API — это сервис Google Play для верификации подлинности и целостности вашего приложения. Простыми словами, это инструмент безопасности, который позволяет убедиться, что взаимодействие пользователя с вашим приложением происходит честно и легитимно
Суть работы API - на запрос из приложения вернуть вердикт о различных типах рисков:
👉 Несанкционированный доступ — проверяет, был ли установлено или оплачено через Google Play.
👉 Модификация кода — убеждается, что код приложения не был изменен. Поддельные устройства — проверяет, работает ли приложение на подлинном, сертифицированном Android-устройстве.
👉 Кроме того, API обнаруживает непатченные устройства — проверяет, установлены ли на девайсе свежие обновления безопасности.
👉 Опасные приложения — выявляет программы, которые могут контролировать экран или перехватывать данные.
👉 Автоматизированные атаки — определяет, не генерирует ли устройство аномально много запросов. И повторные попытки — проверяет, не пытается ли это же устройство совершить злоупотребление еще раз.
С помощью Play Integrity API вы можете предотвращать мошенничество — блокировать несанкционированные платежи и финансовые операции. Можно защищать от взлома — обнаруживать модифицированные версии приложения, распространяемые пиратами. API помогает бороться с читингом — предотвращать использование взломанных версий в играх. И, наконец, защищать пользователей — выявлять опасные приложения на устройстве, которые могут украсть данные.
По данным Google, приложения, использующие Play Integrity API, видят на 80% ниже несанкционированное использование по сравнению с другими приложениями. Крупные компании вроде Uber, TikTok, Stripe, Paytm уже интегрировали его себе.
⚠️ Play Integrity API работает не только на сертифицированных Google устройствах на базе Android, а значит там точно должны быть Google Play Services.
‼️ВАЖНО Никакая защита не может дать абсолютной гарантии безопасности, но это не значит что не нужно интегрировать решения, а то что надо следить за безопасностью вашего продукта, вовремя обновлять его защиту и предотвращать небезопасное использование, позвляющее украсть данные и имущество пользователя
#GooglePlay#Безопасность#GMS
🛒Приложения с Google Play Services смогут проверять была ли установка их продукта на устройстве, даже если происходил его сброс 🤯 Фича называется Device Recall
Приложения смогут сохранить и получить данные, связанные с конкретным устройством. Информация сохраняется на серверах Google, что позволит получить данные после переустановки и даже сброса устройства до заводских настроек.
#googleplay#gms#android#безопасность#googleio
B2B ASEAN принял участие в Форуме Меконга 2025 🇨🇳🇰🇭🇱🇦🇲🇲🇻🇳🇹🇭
30–31 июля в Пномпене (отель Shangri-La) состоялся Форум Меконга 2025 на тему «Устойчивое развитие субрегиона через новые экономические модели».
Участие B2BASEAN:
- Активное участие в дискуссиях о перспективах экономического сотрудничества
- Вклад в обсуждение ключевых направлений:
🌿 Зелёная экономика
👥 Социальная экономика
🎭 Креативные индустрии- Установление деловых контактов с представителями стран Большого Меконга
Итоги:
Форум стал важной площадкой для выработки стратегий устойчивого развития региона и укрепления партнёрских связей.
@b2basean
#Меконг2025#GMS#УстойчивоеРазвитие
🚢GMS: эскалация на Ближнем Востоке дестабилизирует рынки и тормозит рециклинг.
Глобальный покупатель флота на утилизацию - GMS - отмечает резкий рост волатильности на фоне конфликта на Ближнем Востоке.
Нефть за выходные подскочила более чем на 10% — с ~$63 до ~$71,9 за баррель.
Индекс Baltic Exchange прибавил 1,1%, при этом сегменты Capesize, Panamax и Supramax выросли на 0,2%, 1,4% и 3% соответственно — динамика пока сдержаннее, чем у нефтяных фьючерсов.
Валюты стран-основных переработчиков лома и цены на судовой листовой прокат снизились, пусть и умеренно. Активность на рынке утилизации отошла на второй план: продавцы и покупатели выжидают на фоне неопределённости и дефицита тоннажа, усугублённого геополитикой.
По оценке GMS,масштаб регионального шока сопоставим с периодом COVID по степени прямого и глобального воздействия.
Для отрасли это означает повышенную паузу в S&P-рециклинге, рост цен на бункер и риск дальнейшей турбулентности при затяжной эскалации.
📌GMS (Gulf Maritime Services LLC) — международный покупатель флота, основанный в 1992 году, специализируется на купле-продаже судов на утилизацию. Компания является частной и принадлежит основателям.
#ShipRecycling#GMS#OilPrices#DryBulk#Geopolitics