Установить свойства виджета в 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
🔢 ЦИФРОВОЕ СЕЛЬСКОЕ ХОЗЯЙСТВО МЕНЯЕТ ПРАВИЛА ИГРЫ - главный лейтмотив проходящей в Китае World Agrifood Innovation Conference.
🧬 Комплексное развитие будущей сельскохозяйственной науки, образования и промышленности обсудили на сессии открытия конференции.
🤓 Форум собрал ведущих экспертов и инноваторов в сфере сельского хозяйства и пищевых технологий со всего мира.
🌾 Выступления спикеров позволили по-новому взглянуть на будущее агропродовольственных систем.
📈 Было интересно узнать о последних трендах и прорывных технологиях, которые формируют будущее агропромышленного комплекса.
🤝Помимо насыщенной деловой программы, конференция предоставила отличные возможности для двухсторонних встреч.
‼️ Мне удалось установить ценные контакты с коллегами из разных стран и обсудить потенциальные партнерства.
#WorldAgrifoodInnovation2024#AgTech#FoodInnovation#China
#АссоциацияТеплицыРоссии
Alvie Raises $2.19M for HUGO
Alvie has secured $2.19 million to advance HUGO, the first digital assistant aimed at optimizing the spraying of phytosanitary products and bio-controls, as announced on December 19, 2024.
#Alvie#HUGO#Funding#AgTech#DigitalAssistant#Phytosanitary#BioControls#Innovation#TechFunding#SustainableAgriculture
Беспилотник + умный плуг: как работает тандем будущего уже сегодня?
Мы много говорим о конкретных брендах — Zoomlion, Kverneland. Но настоящая революция происходит там, где эти технологии встречаются с искусственным интеллектом. Речь о беспилотных тракторах.
Почему это уже не фантастика, а необходимость?
🟢Дефицит кадров: Квалифицированных механизаторов становится меньше.
🟢Работа 24/7: «Железный работник» не устает и может выходить в поле ночью или в короткое «окно» хорошей погоды.
🟢Фантастическая точность: Исключается «человеческий фактор». Перекрытия и огрехи сводятся к нулю, экономятся топливо, семена, удобрения.
🟢Безопасность: Нет риска для оператора в сложных условиях.
А где же тут наша любимая механика? А вот где! Беспилотник — это не просто трактор без кабины. Это «мозг», которому нужны современные, умные и надежные «инструменты».
Яркий пример симбиоза: беспилотный трактор AgXeed и плуг Kverneland.
Давайте разберем, как это работает в паре:
1. AgXeed AgBot — это полностью электрический автономный трактор на гусеничном ходу. Оператор задает ему границы поля и маршрут через планшет. Дальше он едет сам, огибая препятствия и соблюдая точность до сантиметра.
2. К нему «в пару» цепляется не какой-нибудь плуг, а, как на примере в видео, Kverneland Почему он идеален?
🔺Надежная геометрия: Он дает стабильно качественную вспашку, что критично для автономной работы — неполадок должно быть минимум.
🔺Эффективность и точность: Отличное крошение и оборот пласта. Беспилотник ведет его по идеально прямой, без «волны», что повышает равномерность обработки.
🔺Полная совместимость: Современные модели Kverneland легко адаптируются к системе автоматической сцепки и «общению» по ISOBUS с «мозгом» AgXeed.
Что получает фермер в итоге?
Фермер становится не водителем, а менеджером процессов. Пока один AgBot пашет с Kverneland, второй может заниматься посевом. Вся техника работает согласованно, а хозяин контролирует все с одного экрана, экономя время и ресурсы.
Вывод: Будущее — не просто в автоматике, а в синергии. Мощный и умный беспилотный трактор раскрывает весь свой потенциал только с точным, выверенным и надежным орудием (как Kverneland). Это и есть сельское хозяйство нового уровня: умное, эффективное и предсказуемое.
#беспилотныйтрактор#AgXeed#Kverneland#умноесельскоехозяйство#точноеземледелие#агротехнологии#AgTech#автономнаятехника#трактор#плуг#фермерство_будущего#zoomlion