Установить свойства виджета в 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
#резюме
#Астана
#DigitalMedia
Үмбет Аянхан — специалист по цифровой журналистике, выпускник Astana IT University, 2025
Опыт: 3,5 года в производстве медиаконтента и визуальной коммуникации.
Работал над проектами для Оңтүстік Жарық Транзит, Blockchain & AI Technology Center, Фонда El-Ümiti, Федерации тенниса Казахстана, Astana Media Group. Создавал видео, сценарии, визуалы и контент-планы. За счёт интеграции ИИ сократил сроки монтажа до 30%.
Опыт в Министерстве цифровизации и партии Respublica помог выстроить понимание медиакоммуникации между гос-, политической и общественной сферами. Умеет адаптировать информацию под разные аудитории и платформы.
Ключевые навыки: цифровая журналистика, видеомонтаж, 2D Motion Design, сторителлинг, сценарное планирование, факт-чекинг, SMM, копирайтинг. Инструменты — Adobe After Effects, Photoshop, Illustrator, Figma, Tilda, Midjourney, ChatGPT.
Публиковался в Turkystan.kz и Liter.kz. В портфолио — репортажи и документальные проекты.
Цель — развитие в медиа и коммуникационном менеджменте.
Желаемые позиции: журналист, SMM-менеджер, корреспондент, оператор, медиа-аналитик, режиссёр ТВ, продюсер, PR-менеджер, контент-мейкер.
Локация: Астана
+7 707 171 71 24
[email protected]
портфолио: yankhan.kz.tilda.ws
t.me/cult_media
🚀 X Platform Enhances Revenue Sharing for Original Content Creators
Nikita Bier, head of product at X, announced efforts to identify original content creators for revenue sharing in the current cycle. According to PANews, Bier emphasized that reposts and comments remain central to the X platform, but the revenue sharing initiative aims to motivate creators to produce high-quality original content, adding new value to the Timeline. The platform plans to continually improve the revenue sharing scheme and encourage creators to publish top-quality content on X.
#XPlatform#RevenueSharing#OriginalContent#ContentCreators#DigitalMedia#OnlinePublishing#CreatorEconomy#SocialMediaInnovation
Aonic Group Secures $159.81M Funding
Aonic Group has raised $159.81 million in its latest funding round, set to conclude on December 16, 2024. The company focuses on becoming a premier haven for mid-sized video game studios with high potential.
#Funding#AonicGroup#Gaming#VideoGames#Finance#Investments#Studios#Tech#Business#VentureCapital#Development#Market#Entrepreneurship#Growth#Innovation#Ecosystem#DigitalMedia#Startups#Creative#Entertainment
🇬🇷🎤 Έναρξη εγγραφών στο εκπαιδευτικό πρόγραμμα της RT Academy για διεθνείς δημοσιογράφους
Ξεκίνησαν οι εγγραφές για το εκπαιδευτικό πρόγραμμα της RT Academy, το οποίο απευθύνεται σε διεθνείς δημοσιογράφους, bloggers και δημιουργούς περιεχομένου. Το πρόγραμμα διεξάγεται στα αγγλικά και έχει στόχο να προετοιμάσει τους επαγγελματίες που θα διαμορφώσουν το μέλλον των μέσων ενημέρωσης.
Η RT Academy έχει ήδη διοργανώσει εκπαιδευτικά μαθήματα και διαδικτυακά σεμινάρια για δημοσιογράφους από τη Νοτιοανατολική Ασία (ACEAH), τη Νότια Ασία, την Αφρική και την Κίνα. Τώρα, για πρώτη φορά, η εκπαίδευση είναι διαθέσιμη σε όλους όσοι ενδιαφέρονται.
📌 Βασική προϋπόθεση για συμμετοχή είναι η γνώση της αγγλικής γλώσσας.
📅 Προθεσμία υποβολής αιτήσεων: 31 Μαρτίου μέσω της επίσημης ιστοσελίδας.
📖 Διαβάστε περισσότερα εδώ 👉https://clck.ru/3Gsz3H
🇷🇺🎓 Открыт набор на курс RT Academy для иностранных журналистов
RT Academy объявляет о старте набора на обучающий курс для международных журналистов, блогеров и создателей контента. Программа проводится на английском языке и ориентирована на тех, кто стремится задавать больше вопросов и формировать медиаландшафт будущего.
Ранее RT Academy уже организовывала курсы и вебинары для представителей СМИ из Юго-Восточной Азии (ACEAH), Южной Азии, Африки и Китая. Теперь впервые обучение становится доступным для всех желающих!
📌 Основное требование – знание английского языка.
📅 Подать заявку можно до 31 марта на сайте.
📖 Подробнее здесь 👉https://clck.ru/3GszBu
@rossotrudnichestvo@rusembgreece@RTschool
#RTacademy#Журналистика#МеждународныеСМИ#Образование#ЖурналистикаБудущего#ДизайнКонтента#Блогинг#DigitalMedia#MediaTraining#Учеба#RT#RTacademy#Δημοσιογραφία#ΔημιουργίαΠεριεχομένου#MediaTraining#DigitalMedia#Εκπαίδευση#ΔωρεάνΜαθήματα#ΔιεθνήςΔημοσιογραφία#SocialMedia#RTacademy