Установить свойства виджета в 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
Пока в нескольких регионах РФ проходят испытания гибридные трактора Zoomlion DV3354, на Ленинградской земле испытывали трактор PG2004 с Немецкой полуавтоматической трансмиссией PowerShift (ZF).
Работа с плугом Kverneland PN100-5 (5 корпусов)на тяжелых почвах.
Глубина обработки 30 см
Скорость 8-9 км/ч
На глубине 20-25 см
Скорость 10-11 км/ч
Работа с тяжелым дискатором (5800 кг)
Диаметр дисков 660 мм.
Глубина обработки 12 см
Скорость 10-12 км/ч
С поставленными задачами трактор Zoomlion PG2004 справился, отмечено что потребление топлива значительно меньше в сравнении с механическими трансмиссиями, выше производительность и комфорт механизатора!
#Агромаг#испытания#демо#Zoomlion@Zoomlion_AG_Rus#PG2004#ZF#PowerShift#лучшийтрактор#Kverneland
Забудьте про ручное переключение!
С трансмиссией от мирового производителя ZF установленной на PG2004 вы получите плавность управления и точность, которые делают каждый проход по полю эффективным. Мягкая смена скоростей не только экономит ваше время, но и снижает утомляемость, позволяя работать с максимальной отдачей.
Трактор Zoomlion PG2004 — это трактор с мощностью 200 л.с. и оснащенный передовыми технологиями, которые минимизируют расход топлива, что снижает эксплуатационные расходы.
Zoomlion PG2004 — европеец в Китайской шкуре!
🌟🌟🌟Если у Вас есть потребность в таком тракторе, мы готовы предоставить его для Вас на демо испытания!🌟🌟🌟
За дополнительной информацией обращайтесь в отдел продаж +79006331826
#Агромаг#лучшийтрактор#демо#испытания#технологии#PG2004#ZoomlionPG2004#китайскийтрактор#ZF#европеец
https://x.com/zachqfish/status/2053461293190062283?s=52
🙏 Why We Cannot See Creator
Sometimes people ask, “Why can’t we see Creator?”
It’s a beautiful question, and one that has echoed through humanity since the beginning of time.
Maybe the answer is simpler than we think.
A child in the womb cannot see its mother.
It cannot comprehend the world beyond the walls that surround it. It does not know who is feeding it, protecting it, or sustaining every breath and heartbeat. And yet, the mother is there the entire time... loving, nourishing, and holding that child in perfect care.
The child may not understand the mother, but the mother understands the child completely.
In many ways, we are no different.
We live inside a vast and mysterious universe, surrounded by intelligence, beauty, and order far beyond what our minds can fully grasp. We may not be able to see Creator with our physical eyes, but we can witness the fingerprints of Creator everywhere... in the rhythm of our hearts, the precision of nature, the power of love, and the quiet inner knowing that reminds us we are never alone.
Perhaps this life is a sacred womb.
A place where our souls are growing, learning, and preparing for a greater birth into a reality we cannot yet imagine.
And just like the child in the womb, we may not fully understand what holds us.
But we are held.
We are guided.
We are loved beyond measure.
One day, when the veil lifts and our awareness expands, we may realize that what we were searching for was never separate from us.
Creator was not hidden.
Creator was carrying us all along.
ZF 🔥
#Creator#Faith#SpiritualAwakening#TheWayOfBeing#DivinePresence#Awakening#Consciousness#NewEarth#TrustTheJourney#ZF🔥