Установить свойства виджета в 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
🌞ОНО ВОЗВРАЩАЕТСЯ ?!
Похоже, гигантское солнечное пятно AR3590, в прошлом месяце ставшее не только крупнейшим в текущем солнечном цикле, но и породившее мощнейшиевспышки класса X, вот-вот вернётся.
Последние 2 недели оно располагалось не обратной стороне Солнца, но Марсоход "Perseverance" исправно отслеживал ситуацию: с 1 по 9 мар. пятно, сохраняя свой размер, выглядело не распадающимся, но вполне здоровым.
Если так пойдёт и дальше, оно вновь, уже во второй раз появится из-за восточного лимба Солнца около 14 мар.
Фото: Солнце с гигантским пятном AR3590 на снимках марсохода "Perseverance", сделанных с 1 по 9 мар.
#sunspot#Perseverance
Марсоход NASA Perseverance впервые получил возможность сам точно определять своё местоположение на Марсе. Раньше он ориентировался по камерам и оборотам колёс, что давало ошибки до 30 метров. Такая неточность была опасна при движении по пересечённой местности. Новая система снижает погрешность до примерно 25 см.
#perseverance#nasa#навигация
📎Подробнее
Марсоход Perseverance сейчас изучает дельту древней реки в кратере Езеро на Марсе. У него есть георадар, который «просвечивает» грунт на глубину до 35 метров. Когда учёные собрали все данные радара воедино, оказалось, что под поверхностью скрывается ещё одна, более древняя и мощная речная дельта. На её фоне нынешние следы рек на поверхности выглядят просто тонким налётом истории.
#perseverance#жизньнамарсе#nasa
📎Подробнее
🔖 3DNews в Telegram | MAX | VK
🪐 Scientists have discovered that Mars’ Jezero Crater once held an ancient lake, where water persisted long enough to form river deltas and deposit clay minerals—materials that can preserve signs of life for billions of years. The Perseverance rover is now exploring this region, searching for tiny fossilized microbes that may have thrived in Mars' watery past. ✨
#Mars⚡#Perseverance⚡#astrobiology⚡#nasa⚡#galaxy⚡#stars⚡#astronomy⚡#universe⚡#cosmos⚡#space
👉subscribe Universe Mysteries
От "Луны-16" до текущих дней: как ИИ стал ключевым членом космических экипажей 🚀🧠
Ровно 55 лет назад, 24 сентября 1970 года, случилось знаковое событие, которое наглядно доказало: роботы способны на самостоятельные космические миссии. Советская станция «Луна-16» впервые в истории в автоматическом режиме доставила на Землю образцы лунного грунта. Это был триумф инженерной мысли и прообраз будущего! 🌍➡️🌕
Тогда это была продвинутая автоматика, запрограммированная на строгий алгоритм действий. Но идея была гениальной: поручить сложнейшую задачу автомату, заложив фундамент для роботизированного освоения космоса.
Сегодня эту концепцию вывели на принципиально новый уровень благодаря искусственному интеллекту. Современные марсоходы, такие как Perseverance, — это уже не просто исполнители команд с Земли. Они — автономные ученые:
➡️Самостоятельно прокладывают путь, объезжая камни и опасные участки, экономя драгоценное время на связь с Землей.
➡️Анализируют породы с помощью встроенных спектрометров, выбирая самые интересные образцы для дальнейшего изучения.
➡️«Мыслят» на месте, принимая сотни микрорешений за один сол (марсианские сутки).
Эволюция налицо: от жесткой автоматики «Луны-16» к гибкому, адаптивному интеллекту современных роботов-исследователей. ИИ стал тем самым «следующим пилотом», который позволяет нам изучать миры на расстоянии десятков миллионов километров с невероятной эффективностью.
Что ждет нас дальше? ИИ будет критически важен для:
➡️Строительства автономных баз на Луне и Марсе.
➡️Поиска следов жизни в подледных океанах Европы или Энцелада.
➡️Управления сложными орбитальными станциями и звездолетами будущего.
Рекомендую вспомнить посты ранее:
➡️ИИ строит мост к Марсу: как роботы Optimus проложат путь человечеству?
➡️Человек слаб, ИИ — неуязвим.
Как это поможет на Марсе?
А как вы думаете, какая следующая крупная космическая задача будет полностью доверена искусственному интеллекту?
Или без человека никуда?
Делитесь мнениями в комментариях! 👇
#ИИвКосмосе#Космонавтика#Луна16#Perseverance#ИскусственныйИнтеллект#Нейросети#Будущее#Наука#Марс#Робототехника
https://t.me/semasci