Установить свойства виджета в 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
#softSkills#raspberryPi
😎
Raspberry Pi for Beginners
Description
The course will start with setting up your Raspberry Pi and installing Raspberry Pi OS without an external monitor and keyboard, followed by getting along with the basics of Python3 programming. You will then work with the Raspberry Pi’s GPIO panel, use a PIR sensor to detect movement from your Pi, and discover how to use a Unix terminal and the most useful command-line tools. You will also send an email from your Raspberry Pi, take photos and videos using the Raspberry Pi camera V2, and create a web server on your Raspberry Pi with the Flask framework. Finally, you will build a complete surveillance and alarm project with Raspberry Pi.
Author(s): Edouard Renard
Language: English
Updated: September 2022
Videos Duration: 10h 8m
🔗Link
-----
Main channel: @repo_science
Coupons: @freecoupons_reposcience
-----
Пейджер для Telegram без сотовой связи из России! 📡
Инженер создал девайс на Raspberry Pi с mesh-сетями:
Домашний модуль — сервер
Переносной — для чтения каналов
✅ Работает при блокировках
✅ Только текст (без фото/видео пока)
✅ Цена ~3000 рублей (452000сум)
Лучше гаджета для свободы информации не придумаешь! 😎
#TelegramPager#MeshСети#RaspberryPi#Технологии#Россия
Коллеги, друзья и все, кто следит за рождением Адама и Евы! Вчера случилось то, ради чего всё затевалось: я провёл первые полевые испытания зрения Адама в реальном мире, и он в режиме реального времени не просто видел объекты, а описывал их вслух голосом, как настоящий помощник.
Вот как это работает сейчас на железе робота:
1. Глаз: Камера на Raspberry Pi захватывает изображение.
2. Зрение (YOLOv11n, 5 МБ): Сверхлёгкая модель детектирует объекты примерно за 1 сек / кадр.
3. Осмысление (YandexGPT): Получившийся список объектов передается в YandexGPT, который формирует лаконичное и понятное описание сцены.
4. Голос (Yandex SpeechKit): Это описание не печатается в терминале, а сразу синтезируется в чистый, человеческий голос и звучит из динамика робота. 🔊
И это не симуляция — это работающий алгоритм на настоящем железе.
Что это значит на практике? Я говорил Адаму:«Посмотри вокруг», и через мгновение он отвечал голосом: «Я вижу человека в помещении, монитор, ноутбук и телефон на столе». Это был не заранее заготовленный ответ, а результат живого-анализа обстановки перед ним. Он буквально делился своими мыслями о том, что видит.
Почему это прорыв? Потому что мы перешли от сухих технических тестов к реальному взаимодействию. Робот теперь не бездушный детектор объектов, а сущность, которая способна воспринимать мир и коммуницировать на нашем языке — голосом.
Впереди бескрайнее поле для экспериментов с поведением и сценариями использования. Спасибо, что вы с нами на этом пути! Это невероятно вдохновляет.
#робототехника#ии#искуственныйинтеллект#yolo#raspberrypi#компьютерноезрение#адам#ева#YandexGPT#SpeechKit#голосовойИИ
🛰️✈️Импортозамещение на высоте: в России создают аналог Flightradar24
🇷🇺 Новый сервис «Авиарадар» — это отечественный ответ на Flightradar24.
С конца 2023 года система работает в бета-режиме, уже охватывая большую часть европейской части страны.
📆 В ближайшее время планируется полноценный коммерческий запуск.
📡 Основа — сеть приёмников, собирающих ADS-B сигналы с гражданских самолётов и передающих их на сервер.
💻 Приёмники можно собрать даже на Raspberry Pi или Orange Pi, а в будущем планируется установка оборудования на микроспутники для слежения за рейсами над океанами и труднодоступными регионами🌍
👨💻 Проект требует знаний в IT и электронике, а также немалых серверных мощностей.
💼 Основная цель — b2b-сегмент: авиакомпании, логистика, государственные структуры.
👥 Волонтёры, устанавливающие оборудование, получают расширенную аналитику и доступ к онлайн-карте.
💬 Разработчики ищут инвестора для масштабирования. Среди потенциальных партнёров — 2ГИС.
При поддержке «Авиарадар» может стать национальной платформой авианаблюдения, особенно важной в условиях текущей геополитики.
#Авиарадар#Flightradar24#импортозамещение#авиация#технологии#RaspberryPi#логистика#гражданскаяавиация#авиатрекер#ИТ#наблюдение#Россия#инновации#b2b#авиапром#слежение