Установить свойства виджета в 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
🤔 «стоит ли тратить свою субботу на Creative One от AIESEC в Астане?»
🙌 если коротко, ещё как стоит! этот выходной нужно провести по полной, и вот что тебя ждет:
Creative One - это твой шанс погрузиться в мир маркетинга, медиа и кино 🎨
Никакой скучной теории → только реальный опыт от топовых спикеров, расширение горизонтов и мощный заряд вдохновения для твоего творчества!👾👾👾
у тебя наверняка есть вопросы:
⭐️а что я получу?
полезный нетворкинг, вкуснейший кофе брейк, и призы за активность в виде бонуса.
👑
узнаю ли я что-то новое??
конечно!
спикеры раскроют инсайты индустрии; ты увидишь реальные возможности развития в Казахстане и поймешь, куда и как двигаться дальше.
✍️
а если я новичок и ничего не знаю о тематике?
опыт не важен!
форум как раз таки создан, чтобы вдохновить тебя и создать пространство для обмена идеями между теми кто реально интересуется.
более сотни людей уже в деле; не упусти и ты свой шанс получить дозу мотивации и полезных знакомств! ☄️☄️☄️
🗓когда? 24 января 2025
📍где? Назарбаев Университет
⏰дедлайн: 23 января, 23:59
регистрируйся прямо сейчас по ссылке и следи за нами в Instagram и Telegram!
#create with aiesec.
Как делать чеки с шестью нулями в Казахстане? 💰💰💰
Все твердят: «Хочешь успеха, встань с дивана». А мы скажем: в 2026 году это уже не обязательно. Благодаря технологиям и AI можно строить бизнес мирового уровня, не выходя из дома. Наши спикеры докажут, что умные алгоритмы работают эффективнее, чем беготня и суета 💥💥💥
Знакомься, твои хедлайнеры на 24 января:
👤Куна Амангали: Лид-дизайнер с оборотом $100.000+ в год. Научит забирать контракты в США и Сингапуре, работая из Казахстана.
👤Санжар Ревшанов: Основатель Neuro Stream. Покажет, как заставить AI приносить деньги.
👤Маржан Хайдар:Режиссер «Forever 29». Объяснит, как превратить творческую идею в продукт с миллионными охватами и прибылью.
👤Альмира Кутанова:Со-основатель UNIM School. Масштабирует онлайн-проекты и управляет маркетингом на высоких чеках.
👤Маншук Керей: Стратег с опытом 13 лет. Упакует ваш проект так, чтобы он стоил дорого и выделялся среди конкурентов.
👤Ярослав Мудрый: Эксперт по GEO-продвижению. Научит находить прибыльные ниши через AI.
➖➖➖➖➖➖➖➖➖➖
Готов провести день среди тех, кто создает тренды, а не просто следит за ними? 🚀
👉ссылка на регистрацию
📲наш тг-канал
🗓24 января | Назарбаев Университет | Orange Hall
⏱Дедлайн: 23 января, 23:59
#create with aiesec.
💡 今日金句
当你停止创造,你的才能就不再重要,你所拥有的只剩下你的品味。
而品味会裹挟你,让你排斥他人、变得狭隘。
所以,创造。
When you don’t create things, you become defined by your tastes rather than
ability. your tastes only narrow & exclude people. so create.― Why The Lucky
Stiff
via 今日金句
标签: #create#your#tastes
⚡️探索号频道
⚡️探索者频道
⚡️探索者交流群
⚡️ Youtube 频道:科技探索者
每天推荐有趣内容,欢迎订阅、转发。
🪂Airdrop: DanceFit Genesis Giveaway
💰Value: 10,000 $DDR Prize Pool
👥Referral: +20 Entries
📒Partnership:Ceres, Octopus, Polygon
📅End Date: 10th December, 2022
🏦Distribution Date: Q1 2023
🔗 Airdrop Link: Go to the Airdrop Page
📃Information
DanceFit is a #Web3 social platform where users can #Dance, #Create and #Share
Disclaimer: Airdrop is 100% free. Don't send any fee or penny for receiving airdrop tokens. Just join airdrop for free!
🚀Airdrop: DanceFit Genesis Giveaway
💰Value: 10,000 $DDR Prize Pool
👥Referral: +20 Entries
📒Partnership:Ceres, Octopus, Polygon
📅End Date: 10th December, 2022
🏦Distribution Date: Q1 2023
Go to the Airdrop Page
📃Information
DanceFit is a #Web3 social platform where users can #Dance, #Create and #Share
Disclaimer: Please do your own research before joining to any airdrops project, also airdrop is 100% free.
@CineNoticiasbot🇪🇸
Qué puede hacer este bot?
Este es un bot de canales de noticias de cine, es una interesante opción para mantenerte actualizado sobre el séptimo arte
Idioma: ESPAÑOL
(visto en @BotsGram.cu)
#manybot, #create, #subscription
@StikRobot
Qué puede hacer este bot?
Con este bot puedes crear y copiar paquetes de pegatinas sin mencionar el bot en el título del paquete de pegatinas, cree pegatinas de texto, cree pegatinas a partir de fotos o simplemente convierta fotos en pegatinas. Es gratis, sin límites, sin anuncios.
Idioma: Inglés, Ruso
(visto en @BotsGram_cu)
#sticker, #create, #text, #photo
@GuideRobot
Qué puede hacer este bot?
Este bot te ofrece un catálogo de los mejores canales de telegram
Idioma: Inglés
(visto en @BotsGram_cu)
#manybot, #collection, #create, #subscription, #telegram
@Chatbotcreatorbot
Qué puede hacer este bot?
Con este bot puedes crear tus propios Telegram Chatbots o usar plantillas existentes. No se requieren habilidades de codificación.
Idioma: Inglés
(visto en @BotsGram_cu)
#create, #chat, #development, #dev, #botbuilding
@FavoriteStickersBot
Qué puede hacer este bot?
Con este bot puedes coleccionar tus pegatinas favoritas en un solo juego de pegatinas!
Idioma: Inglés
(visto en @BotsGram.cu)
#sticker, #pack, #collection, #favorite, #create, #set
@StickersDownloaderBot
Qué puede hacer este bot?
Con este bot puedes coleccionar y descargar pegatinas
Exporta el paquete de pegatinas de Telegram en un archivo zip.
Idioma: Inglés
(visto en @BotsGram.cu)
#sticker, #pack, #collection, #favorite, #create, #set