Установить свойства виджета в PySide можно не только через соответствующие методы и конструктор класса. Можно их изменять с помощью метода setProperty по имени.
btn = QPushButton("Click Me")
btn.setProperty("flat", True)
Это аналогично вызову
btn.setFlat(True)
Если указать несуществующее свойство, то оно просто создается
btn.setProperty("btnType", "super")
Получить его значение можно методом .property(name)
btn_type = btn.property("btnType")
Когда это может быть полезно?
▫️Можно просто хранить какие то данные в виджете и потом их доставать обратно
widget = QWidget()
widget.setProperty('my_data', 123)
print(widget.property('my_data'))
▫️ Назначая эти свойства разным виджетам можно потом отличить виджеты во время итераци по ним. Например, найти все кнопки со свойством my_data="superbtn".
Но ведь вместо кастомного свойства можно использовать objectName, будет тот же результат.
Да, но y ObjectName есть ограничение - только строки.
▫️ Если нам потребуется не просто поиск а, например, сортировка по числу, то свойства позволяют нам это сделать. Поддерживается любой тип данных
widget.setProperty('my_data', {'Key': 'value'})
widget.setProperty('order', 1)
all_widgets.sort(key=w: w.property('order'))
Но ведь Python позволяет всё вышеперечисленное сделать простым созданием атрибута у объекта
widget.order = 1
widget.my_data = 123
Да, но я думаю что не надо объяснять почему не стоит так делать. К тому же, если у виджета нет свойства то метод .property(name) вернет None, а отсутствующий атрибут выбросит исключение.
▫️ Действительно полезное применение кастомным свойствам - контроль стилей. Здесь атрибутами не обойтись, нужны именно свойства.
Дело в том, что в селекторах стилей можно указывать конкретные свойства виджетов на которые следует назначать стиль.
Просто запустите этот код
from PySide2.QtWidgets import *
if __name__ == "__main__":
app = QApplication([])
widget = QWidget(minimumWidth=300)
layout = QVBoxLayout(widget)
btn1 = QPushButton("Action 1")
btn2 = QPushButton("Action 2")
btn3 = QPushButton("Action 3", flat=True)
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.addWidget(btn3)
# добавим кастомное свойство одной кнопке
btn1.setProperty("btnType", "super")
# добавляем стили
widget.setStyleSheet(
"""
QPushButton[btnType="super"] {
background-color: yellow;
color: red;
}
QPushButton[flat="true"] {
color: yellow;
}
"""
)
widget.show()
app.exec_()
С помощью селектора мы избирательно назначили стили на конкретные кнопки.
Как получить список всех кастомный свойств?
Функция получения списка кастомных свойств отличается от получения дефолтных.
def print_widget_dyn_properties(widget):
for prop_name in widget.dynamicPropertyNames():
property_name = prop_name.data().decode()
property_value = widget.property(property_name)
print(f"{property_name}: {property_value}")
#tricks#qt
#вакансия#маркетинг#B2C#middle
Яндекс Лавка
Менеджер по маркетингу, которому можно полностью доверить B2C-маркетинг в данных категориях.
Задачи:
— Разработка и реализация маркетинговой и коммуникационной стратегии
— Проведение маркетинговых кампаний и оценка их эффективности
— Рост основных метрик направления
Требования:
— Опыт в области бренд-маркетинга и/или смежных областях маркетинга больше трёх лет
— Опыт разработки и реализации маркетинговой и коммуникационной стратегии для пользователей, продвигали новые продукты на рынке и развивали существующие
— Опыт запуска маркетинговые кампании формата 360 с наружной, медийной и перформанс-рекламой, SMM, внутренними и другими каналами
— Понимание маркетинговых и бизнес-метрик, сильные коммуникационные навыки для выстраивания работы с командами маркетинга, коммерции и продукта
— Системный подход к анализу данных и оптимизации процессов
Опыт в сегменте FMCG, e-commerce или e-grocery будет плюсом
ЗП 120+ на руки
Контакт: @nikyashchuk
PR Team Lead в международный бренд службы заказа такси и доставки продуктов Яндекса - Yango (Африка)
Yango - международный бренд Яндекса, предоставляющий услуги в сфере мобильности и доставки в странах Европы, Ближнего Востока и Африки. В Африке доступны несколько сервисов Yango, включая заказ такси и доставку, поэтому компания ищет руководителя отдела по связям с общественностью, который будет управлять коммуникациями в этом регионе.
В ваши задачи будет входить составление бюджета и оценка эффективности PR-кампании, подбор и управление членами PR-команды в регионе, работа по управлению сетью PR-агентств, охватывающих африканские рынки, контроль создания локального коммуникационного контента для традиционных СМИ, SMM и других каналов, управление отношениями с ключевыми СМИ в регионе.
Подробнее по ссылке
#pr#b2c#яндекс#релокация
Курьер Сервис Экспресс приглашает всех участников мероприятия ECOM Expo’20 на стенд 3.19 (доставка и логистика). В рамках данного мероприятия специалисты КСЭ расскажут о расширении услуг компании, а также презентуют новые решения и сервисы для игроков рынка e-commerce!
Также на нашем стенде сегодня и завтра будут разыгрываться призы (кофе-машина, power bank и др.). Приходите и участвуйте!
Ждём вас всех у стенда 3.19!
#КСЭ#CSE#КурьерСервисЭкспресс#CourierServiceExpress#Доставка#Логистика#Фулфилмент#Склад#Трекинг#Перевозчик#Уведомления#EcomExpo#Ecommerce#Retail#Ecom#B2C#B2B#Expo
Курьер Сервис Экспресс приглашает всех участников мероприятия ECOM Expo’19 на стенд А2. В рамках данного мероприятия специалисты КСЭ расскажут о расширении услуг компании, а также презентуют новые решения и сервисы для игроков рынка e-commerce!
Также, на нашем стенде сегодня и завтра будут разыгрываться призы (полёт на вертолёте, поход в стрелковый клуб и билеты на различные мероприятия). Приходите и участвуйте! Ждём вас всех у стенда А2!
#КСЭ#CSE#КурьерСервисЭкспресс#CourierServiceExpress#Доставка#Логистика#Фулфилмент#Склад#Трекинг#Перевозчик#Уведомления#EcomExpo#Ecommerce#Retail#Ecomm#B2C#B2B#Expo
X5 RETAIL GROUP И «КУРЬЕР СЕРВИС ЭКСПРЕСС» ЗАКЛЮЧИЛИ СОГЛАШЕНИЕ О СТРАТЕГИЧЕСКОМ ПАРТНЕРСТВЕ
Соглашение было подписано в рамках выставки ECOM Expo 2019 представителями КСЭ и Х5 ОМНИ, дочерней компании X5, развивающей технологическую платформу почтовых сервисов на базе логистики и магазинов X5 Retail Group.
Соглашение предполагает организацию фулфилмента полного цикла и доставку скомплектованных интернет-заказов, принятых в терминалах «Курьер Сервис Экспресс» в постаматы и пункты выдачи заказов (ПВЗ), размещенные в магазинах торговых сетей X5.
Доставка будет осуществляться посредством логистического решения Х5 ОМНИ через собственные сортировочные центры компании. Также у покупателя появится дополнительная услуга доставки заказов курьерами КСЭ до двери получателя.
#КСЭ#CSE#КурьерСервисЭкспресс#CourierServiceExpress#Доставка#Логистика#Фулфилмент#Склад#Трекинг#Перевозчик#Уведомления#EcomExpo#Ecommerce#Retail#Ecomm#B2C#B2B#Expo#X5#X5RetailGroup
Top 5 Insights from Trendoscope Lab
1️⃣ a16z's new report reveals top B2C AI apps by traffic differ from revenue leaders like photo and video editors. Read more
2️⃣ Google launches AI Mode with Gemini, initially for Google One subscribers, enhancing AI SEO relevance. Details here
3️⃣ Short drama apps surge with 221% annual growth in downloads, affecting traditional streamers like Netflix and Disney+ that declined by 35%. Insight found here
4️⃣ Google and Meta enable developers to access cameras on XR devices, easing previous privacy restrictions. More info and here
5️⃣ Google enhances Android widget visibility with new filters and dedicated pages. Learn more
#AI#Google#Tech#Streaming#XR#Investments#B2C#Apps#VideoEditing#Photos#Dramas#SEO#Privacy#Android#Widgets#Investing#VC#a16z#Trends#Innovation