Установить свойства виджета в 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
DIY fertilizer
Tired of buying expensive fertilizer? If there are lots of nettles in your place, here is an alternative:
Grab a big bucket and stuff it with cut nettles. If it's like 2/3rds full, add water until the nettles are covered.
Important: Seal the bucket! After some time the content will start to decompose and the water will take the nutrients, turning into manure. It smells horribly!
If you can't stand the smell of the manure any more, you can remove the nettles and use the liquid as fertilizer.
#diy#gardening
@EuropeanTribalism
The Ultimate Self-Sufficiency Handbook: A Complete Guide to Baking, Carpentry, Crafts, Organic Gardening, Preserving Your Harvest, Raising Animals, and More by Abigail Gehring
This compact guide provides advice, tips, and step-by-step instructions for hundreds of projects, offering the entire family the tools they need to make the shift toward self-sufficient living. With special features for young homesteaders, this is an essential family guide to self-sufficient living.
🔗Downloadable PDF
#Homesteading#Gardening
@EvolvedTruth
Eggshells add calcium carbonate to soil, helping fast-growing plants like tomatoes and peppers grow strong and reducing soil acidity. To use, dry and grind eggshells into powder, then sprinkle around plants.
Their sharp edges might keep pests like slugs and snails away, but this is not proven.
🥚🌿🐌
[Read more]
@googlefactss
#Gardening#Eggshells#Calcium#PlantCare#PestControl
🙋♂️Дорогие друзья. Запускаем марафон с подарками от Андрея Малышева. ❗️Вопрос-Ответ. Почему название ютуб канала Андрея называется «Розовое Дерево»? ✅небольшая подсказка🤫 с чего всё начиналось, именно начало работы Андрея в далёком 2002 году. Но главное кто является синонимом, и в какой книге я нашёл название, автор книги и как называется 📙книга. За правильный ответ вы получаете невероятные подарки🎁. ❗️❗️❗️Анонс акции состоится 11 октября в 12:00 в прямом эфире телеграмм канала «Розовое Дерево» Андрей расскажет более подробно об акции и даст подсказки. Гортензия от селекционера Гвидо Руветт с5л 🔥Бонфайр(Bonfire) и новинку от селекционера Алекса Шумейкера, самая зелёная Гортензия в Мире Литл Аппл(Little Apple/Living No 1826-2.) ❗️Ждём ваших ответов, пишите мне в личку. Подписываемся на Ютуб канал Андрея Малышева «Розовое Дерево»https://youtube.com/channel/UCM66apHukow6v2zY3GJmt6A?si=eCcZ1EVSieOIpf7V и Телеграм канал «Розовое Дерево»https://t.me/+_Uj47ervUqFhYTli
✅ДОСТАВКА ПОБЕДИТЕЛЮ ЗА СЧЁТ АНДРЕЯ, ТК Сдек или Почта РФ❗️ Борьба будет 🔥жаркой, всего один ответ(правильный) и один победитель🌟 Количество подарков ограничено!!!🎁 всего один комплект!!! 🙋♂️вручение подарка в прямом эфире телеграм канала «Розовое Дерево»❗️🥳🥳🥳
По наличию и заказу
📲☎️8-926-645-46-99 Андрей✅Wats app, Viber, Telegram
http://питомник-гортензий.рф/ПРАЙС/
Наша группа 🌀ВКонтакте и telegram ✅питомник-гортензий.рф👍💯 на Ютубе канал ❤️🌸Розовое Дерево🌸 Соцсеть @sadovnik_ma, наши главные спонсоры этого марафона конечно мои друзья, Борис из Алтайского Края с его замечательным Ютуб каналом ✅Борис Борисов @borisiv1990n(https://youtube.com/@borisov1990n?si=83KJ26kZkwpEdcHm)
, Константин Сапожников с его замечательным ютуб каналом ✅Сам Себе Аграном @SamSebeAgronom(https://youtube.com/@samsebeagronom?si=6tXGrzNIdLear9la) и вторым каналом в телеграм СамСебеАгроном(https://t.me/SamSebeAgronom), моя ❤️лучшая дачная фея 🤗🌟Ольга Платонова с её ютуб каналом(https://www.youtube.com/c/PlatonovaOlga) телеграмм каналом (https://t.me/platonovaolechka), Инстаграм каналом (https://www.instagram.com/platonovaolechka/), а также звезда театра и кино с мужем 🌟Анастасия и Роман Макеевы/Мальковы)ютуб канал(https://youtube.com/@malkovamakeeva?si=hhp0x7pnAp9w5klT), ✅Виноград Ульяновска- https://t.me/vinograd73, Инстаграм: Vinograd_ulsk, https://vk.com/vinograd_ulsk, https://youtube.com/@vinograd_ulsk?feature=shared,
✅Дом и Сад семьи Бадаеевых(@badaevshouse) это Инстаграмм канал, ✅Людмила Кудасова( Lyudmila Kudasova) ютуб канал https://youtube.com/@l.kudasovasad?si=5yvgh35VC6pDwwpO
#гортензия#гортензии #гортензияметельчатая#гортензиякрупнолистная#гортензииметельчатые#гортензияказань#гортензияалматы#гортензиямосква#гортензииастана#гортензиякраснодар#гортензияуфа#gidrangea#paniculata#garden#gardenflowers#gardening#gardendesign
Ничего особо не видел. Туман был сильный.
#travel#foodie#fitness#art#music#photography#nature#fashion#beauty#motivation#quotes#books#coffee#technology#gaming#movies#design#architecture#cars#motorcycles#space#science#history#culture#streetstyle#selfcare#mindfulness#yoga#meditation#business#entrepreneur#marketing#startup#coding#ai#robotics#education#learning#languages#writing#poetry#drawing#painting#digitalart#illustration#animals#cats#dogs#wildlife#ocean#mountains#sunset#sunrise#citylife#streetphotography#minimalism#vintage#retro#luxury#watches#sneakers#streetwear#makeup#skincare#healthyfood#vegan#recipes#baking#gardening#plants#flowers#home#interior#decor#lifestyle#adventure#explore