Установить свойства виджета в 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
У Range Rover сейчас большой выбор моторов, от 3-х литрового дизеля до турбо V8 с мягким гибридом на 600 лс. Вес - 2500+ кг, ускорение до сотни 4,6-6,5 сек, в зависимости от мотора. Они все большие, тяжелые и быстрые.
Тормозные колодки изнашиваются, это неизбежно. Как быстро их надо менять, зависит от манеры езды.
Но три владельца в США решили, что они изнашиваются, потому что некачественные. Колодки пришлось поменять на пробеге 20+ тыс км. Они подали коллективный иск. JLR попытался уладить миром, но хозяева все равно идут в суд.
Правильно, молодцы - 👍
Рвачи, ничего не выйдет - 👎
#rangerover
Новое поступление в Major Expert - Range Rover Sport 2021 года выпуска с небольшим пробегом - всего 50 тыс км.
Дизельный двигатель 3 л ,мощностью 249 лс и 600 Нм, полный привод, 8-и ступенчатая АКПП. Разгон до 100 кмч за 8,5 сек. Богатая комплектация - обогрев лобового стекла и руля, парктроники, камера заднего вида, навигация, музыка MERIDIAN. Диски 22", черный потолок.
Машина продается по программе Major Expert Select, прошла предпродажную подготовку. Один хозяин. Возможна покупка в лизинг. Полностью в родной краске.
Цена - 8,01 млн руб
Менеджер Кирилл @KirStar96.
#rangerover
Range RoverAutobiography - стиля и комфорта больше, чем у премиальных немцев, а технологии не уступают немецким.
Турбированный бензиновый V8 4,4 литра на 530 лс и 750 Нм, полный привод, 8-и ступенчатая АКПП. Разгон до сотни за 4,6 секунды. Колеса 23", панорамная крыша, отделка салона черным глянцем, кожаная обивка потолка, подогрев, вентиляция и массаж сидений, сенсорное открывание багажника.
Прецизионная точность управления и динамика спорткара - в потрясающе красивом кузове и салоне из кожи и дерева.
Цена 24,5 млн руб
Менеджер Кирилл @KirStar96
#rangerover
Range Rover Velar всегда хотел быть дизайнерским и стильным. В 2026 выйдет новое поколение, оно будет вообще не внедорожным.
Никаких ДВС, только электричество. Полный привод, два электромотора, мощность больше 500 лс, батарея 100 кВт ч, ультра-быстрая зарядка, запас хода до 600 км.
На фото, под маскировкой, силуэт лифтбека. Первого в истории марки.
Нравится - 👍
Ненастоящий RR - 👎
#rangerover
Стильный, элегантный и спортивный одновременно - RANGE ROVER VELAR. В Major Auto новые автомобили без пробега.
На фото VELAR HSE. 2-х литровый бензиновый мотор на 250 лс, полный привод, около 7 секунд до 100 кмч. Серый благородный кузов и роскошный черно-красный салон.
Диски 21", панорамная крыша, камеры кругового обзора, электропривод багажной двери, адаптивный круиз.
Цена - 9,1 млн руб
Менеджер Кирилл @KirStar96
#rangerover
В фильме Ричи "Карты, деньги, два ствола" сюжет крутился вокруг ружей Holland&Holland. Это культовый ружейный бренд, с 1835 г. делающий под заказ охотничье оружие за десятки и сотни тысяч фунтов.
Ателье Overfinch строит ультра-премиум версии Range Rover, кастомизация увеличивает стоимость RR в 2-3 раза.
Сейчас Overfinch и Holland&Holland показали "охотничий Range Rover" за 600 тыс долларов. На YouTube есть промо, но на фотографиях можно рассмотреть лучше. Выглядит ураганно, даже нет вопросов почему так дорого.
Нравится — 👍
Не очень — 👎
#rangerover
Range Rover — когда BMW и Mercedes кажутся слишком банальными и скучными. Range Rover дает больше стиля и больше комфорта при таком же высоком уровне технологий и престижа. Влюбляет в себя.
Сейчас в Major Expert 13 вариантов на выбор, от дикого 5-и литрового бензинового на 525 лс, до сдержанного, но достаточного 3-х литрового дизеля. Года выпуска — 2014-2024, цены от 4 до 30 млн руб (машина 23 года с пробегом 100 км)
Прецизионная точность управления, динамика на уровне выдающейся, абсолютное равнодушие к дорожным условиям. Дождь, снежная каша, всё равно — он едет как по рельсам. И всё это в утонченной оболочке из британского стиля, качественной кожи и дерева в салоне.
#rangerover
Range Rover Velar — идеальный подарок любимой женщине.
Ни с чем не сравнимый британский стиль. Автомобиль обращает на себя внимание окружающих везде, куда бы он не приехал. Комфорт салона — на уровне больших Range Rover. Все современные опции и ассистенты.
Бензиновый 2-х литровый мотор мощностью 250 л.с. обеспечивает достаточную динамику и не чрезмерен. Сесть за руль может человек без специальной подготовки.
#rangerover
Range Rover Evoque — утончённый и технологичный SUV. Вход в мир Range Rover.
Фирменный британский дизайн, высокий уровень комфорта и статусность марки, но в лёгком городском формате.
Внутри — премиальные материалы, цифровая панель и акустика Meridian, а полный привод и плавный ход делают поездку комфортной в любых условиях.
Особенно популярен среди девушек — за лёгкость управления, высокий обзор и ощущение уверенности на дороге.
#rangerover
RANGE ROVER. Максимальный комфорт и динамика. У британцев свой особый стиль без агрессии и немецкой суровости.
Сейчас в MAJOR новые автомобили в комплектации Autobiography и SV.
Бескомпромиссные бензиновые V8 на 530 л.с. и 615 л.с. Практичный дизельный V6 на 350 л.с. Динамика разгона от 4,6 до 6,3 секунды.
Автомобиль продолжает радовать, даже войдя в привычку. Если он понравился, то отказаться от него, заменить чем-то другим сложно.
#rangerover
Range Rover Velar
Легкий, стремительный и элегантный.
В Major 12 автомобилей на выбор, с 2-х литровым бензиновым двигателем на 250 л.с. с разгоном до сотни за 7,5 секунд и 3-х литровым дизельным на 300 л.с. и разгоном за 6,5.
Репутация и спортивный характер делают его подходящим для мужчины. Стиль и элегантность — для женщины.
#rangerover