Установить свойства виджета в 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
🔤ОРТИҚЧАКАЛЬЦИЙҲАВФИ
АҚШ ва Европа эндокринологлар уюшмалари 50 дан ошган одамларга кунига 700-1200 мг кальций қабул қилишни тавсия этган. Одатда бу тавсия остеопорозни (суяклар мўртлашиши) олдини олиш учун берилади.
Лекин 2021-йилда чоп этилган катта таҳлил шуни кўрсатдики, кальций қўшимчаларини қабул қилиш юрак томирларида муаммо келтириб чиқариши мумкин.
Айтиб ўтиш керакки, баъзи давлатларда 70%гача қария аёллар шифокор маслаҳатисиз кальций қабул қилади. Кальций сотувчи компаниялар кўпайгани сари, реклама ортидан бу кўрсаткич ошиб боряпти. Уни устига, баъзилар параллел равишта кальций сақловчи поливитамин/минераллар ҳам қабул қилади. Яъни доза ошиб кетиши мумкин.
☠️ 388 229 кишида ўтказилган тадқиқотда эркаклар кунига 1000 мг дан кўп кальций қабул қилиши 12 йиллик кузатувда юрак-қон томир касалликлари сабабли ўлим ҳавфини нисбатан ошириши мумкинлиги аниқланган.
17,5 йиллик кузатувда ҳам кунига 1000 мг дан кўп кальций қабул қилиш барча сабаблардан ўлим даражасини оширган. ☝️Аммо овқат таркибидаги кальций бундай ҳавфга эга эмаслиги аниқланган.
Корейс олимлар ҳам ўхшаш ҳулосага келишган ва инфаркт, инсульт, ўлим ҳавфи ошишини топишган.
Ортиқча кальций томирлар деворида йиғилиб уларни эгилувчанлигини пасайтиради. Яна тромбоцитларни фаоллаштириб, қонни қуюқлаштириши мумкин.
❗️МУҲИМ!
- келтирилган текширувлар узоқ муддатли (5 йил ва ундан кўп) кальций қабулини таҳлил қилган
- бу тадқиқотлар кальций мутлақ ҳавфли ёки қабул қилиниши керак эмас деган ҳулосага олиб келмаслиги керак, кальций саломатлигимиз учун албатта муҳим
ҲУЛОСА:
- кальций қўшимчалари айнан назоратсиз қабул қилинганда ҳавфли бўлиши мумкин
- қўшимчани қабул қилишдан аввал организмдаги кальций миқдори аниқланиши керак (қонда кальций ва ионлашган кальций) ва нормадан кам бўлса, уни ичса бўлади
- минерални қабул қилиш даврида ҳам маълум муддатларда текширув ўтказиб туриш керак
- кальций миқдорини оширишда биринчи навбатда озиқ-овқатга эътибор берган маққул
☝️Яқинлар билан улашинг ва каналга обуна бўлинг!
🩺Doctor Ziyod | #minerals
International Jeweler's Day is a holiday celebrated on January 31st and dedicated to jewelry professionals.
Tiger's Eye is a striking golden-brown gemstone known for its silky luster and captivating chatoyancy ("cat's eye" effect). South Africa is one of the world's leading sources of this beautiful stone, especially in the Northern Cape region.
Fun fact: ancient Roman soldiers wore Tiger's Eye for protection in battle, believing it granted courage and strength. Today, it's popular in jewelry and as a good luck charm, symbolizing confidence and grounding energy.
#jewelry#minerals
🎥Video 1, Video 2
🌍 The world’s largest reserves of phosphate rock, vital for fertilizer, are found in Morocco and Western Sahara. These deposits help feed billions, but supplies are concentrated in just this region. ✨
#resources⚡#minerals⚡#agriculture⚡#geography⚡#nature⚡#earth
👉subscribe Amazing Geography
👉more Channels
🌍 Chile’s Atacama Desert contains the world’s largest natural supply of sodium nitrate, once the world’s main fertilizer before synthetics. This rare mineral helped boost crop yields globally. ✨
#resources⚡#minerals⚡#agriculture⚡#geography⚡#nature⚡#earth
👉subscribe Amazing Geography🌍
🌎 The world’s largest crystal cave, Cueva de los Cristales in Mexico, holds giant selenite crystals that measure up to 12 meters long. These crystals formed over 500,000 years in intense heat and humidity more than 300 meters below the surface. ✨
#minerals⚡#geology⚡#caves
👉subscribe Interesting Planet
👉more Channels
🌎 Deep inside Lechuguilla Cave in New Mexico, explorers have found rare mineral formations called "subaqueous helictites." These twisted crystals form underwater from mineral-rich drips, creating shapes never seen elsewhere. The cave stretches over 248 kilometers, making it one of the longest surveyed caves in the world. ✨
#geology⚡#caves⚡#minerals
👉subscribe Interesting Planet
👉more Channels
🌎 Salt crystals can form “cave chandeliers” in arid underground lakes. These sparkling formations grow when salty water evaporates, leaving dazzling, fragile mineral structures hanging from cave ceilings. ✨
#geology⚡#caves⚡#minerals
👉subscribe Interesting Planet
🌍 The world's largest jade reserves are found in Myanmar, where huge boulders are mined for the precious stone. Some single jade stones weigh more than a small car before being cut. ✨
#resources⚡#minerals⚡#mining⚡#geography⚡#nature⚡#earth
👉subscribe Amazing Geography
👉more Channels
🌍 China is now the world’s top producer of rare earth elements, mining over 60% of global supply. These minerals are essential for smartphones, wind turbines, and electric vehicles. ✨
#mining⚡#minerals⚡#resources⚡#geography⚡#nature⚡#earth
👉subscribe Amazing Geography
👉more Channels
🌍 In South Africa, platinum mining happens more than 1,600 meters underground—deeper than most skyscrapers are tall. These mines supply most of the world’s platinum, vital for electronics and medicine. ✨
#mining⚡#resources⚡#minerals⚡#geography⚡#nature⚡#earth
👉subscribe Amazing Geography
👉more Channels
🌍 Natural graphite, vital for batteries and electronics, is mostly mined in just three countries—China, Mozambique, and Madagascar—making global supplies of this critical resource surprisingly concentrated. ✨
#resources⚡#minerals⚡#mining⚡#geography⚡#nature⚡#earth
👉subscribe Amazing Geography
👉more Channels