Установить свойства виджета в 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
📼📼 ФИШКИ С ТИКТОКА ПОЛНЫЙ ТРЭШ?!😮
Сегодня dan-_- и Nayqo откладывают мышки и клавиатуры и смотрят ТикТок! Мы отобрали пачку лайфхаков, которые либо гениальны, либо заслуживают огромный Red Flag 🚩
Смотрим полный выпуск на наших каналах
👇
🎬YouTube |🖥VK
#R6S#GOGOVP
📼📼 ЭТИ МЕХАНИКИ В R6S НАСТОЛЬКО СЛОМАННЫЕ...
😱
p4sh4 и SkyZs оценивают различные фишки и механики от комьюнити зелёным или красным флагом 😈
Будут ли эти фишки чересчур имбовыми или же останутся неюзабельными? Узнай в полном ролике 👇
🎬YouTube |🖥VK
#R6S#GOGOVP
ТИРЛИСТ ОПЕРАТИВНИКОВ ДЛЯ РАНКЕДА🔥
Смотри ролик и узнай, кто безоговорочно попал в S, а для кого даже D — это слишком хорошая оценка 😎
Видео уже ждёт тебя на наших каналах 👇
🎬YouTube |🖥VK
#R6S#GOGOVP
🎞🎞 С БУТКЕМПА НОВОГО РОСТЕРА ПО R6S🔥🔥🔥
Приглашаем вас на обзор нашего буткемпа
😍 Знакомство с новичками Nayqo, RORICK, SkyZs и тренером Dxrk: как игроки коннектятся между собой и вливаются в ростер, планы на будущее и то, как прямо сейчас строится командная химия
🙌
Фулл ролик ждёт тебя тут ⬇️
🎬YouTube |🖥VK
#R6S#GOGOVP
Объявляем сборку лучших хайлайтов по R6S 🔥
Успей прислать свои самые крутые клипы до 26-го июля и попади на обзор к нашим Медведям: https://forms.gle/MccDdLiMyxPM2EKG9🤩
#R6S#GOGOVP
Обзор нового обновления от JoyStiCK🤩
🤯 Самый горящий раунд?
📁 Что посоветовал бы другу чтоб начать играть в радугу
🤔 Атака или защита? Что больше нравится Джойстику?
Смотри новый ролик на наших каналах и пиши в комментариях, что думаешь о новом патче ты?
🎬 YouTube |🖥VK
#R6S#GOGOVP
«Где логика?» с Медведями из R6S🧠
🏆Always — просто гений!
😦 Причём тут драконы, Ирландия и «Волшебник Изумрудного города»?
🌵 Лионелло Кактуселло!
Смотри новое видео на наших каналах и пиши в комментариях, сколько слов отгадал ты!
🎬YouTube | 🖥VK
#R6S#GOGOVP
JoyStiCK и dan-_- разобрали для вас базу настроек в Rainbow Six Siege 😏
❌ Какие настройки никогда не меняли Медведи;
🔊 Почему диалоги лучше выкручивать на максимум;
💡 Зачем оставлять обводку своих тиммейтов?
🖥 Какие параметры экрана выбрать для игры;
🔵 Почему синий – это лучший цвет для подсветки противников?
Смотри новое видео на наших каналах и играй с профессиональным комфортом 🤩
🎞YouTube | 📡VK
#R6S#GOGOVP
Always и dan-_- разобрали по полочкам лучших оперативников атаки в R6S 🔥
🤩 Самые метовые и главные имбы патча;
👌 Стартовая подборка для новичков;
❌ Кого никогда не пикнет dan-_-?
Чтобы точно не быть "нубом" в Rainbow Six Siege, быстрее смотри видео и учись играть у наших профессионалов 🤩
🎞YouTube | 📡VK
#R6S#GOGOVP
Теперь твои «фенрирки» никто не найдет 😉
dan-_-и JoyStiCK разобрали одного из лучших оперативников защиты — Fenrir: https://youtu.be/Qvkl_rFhz00
👆 Базовые споты для гаджета на Орегоне и Клубе;
👊 Стили игры на Fenrir;
📁 Эффективные комбинации.
Пиши в комментах, на каких картах ты бы ещё хотел увидеть правильную расстановку для гаджета Fenrir!
#R6S#GOGOVP
Долгожданный ролик с Always уже на YT-канале:
https://youtu.be/IsoVHz77JAA
Лучшие споты для камер Valkyrie от dan-_-и Always. В этом гайде узнаем:
💪 Как правильно прятать камеры;
🔥 Защитные и агрессивные споты;
📁 Базовые места на Орегоне, Консульстве, Небоскребе и Лабе.
Пиши в комментах, на каких картах ты бы ещё хотел увидеть секретные места для камер Valkyrie от Медведей!
#R6S#GOGOVP
🤩 После этого видео вы не сможете играть в R6S по-другому: https://youtu.be/4uXKHUDTVp4
В новом гайде на канале JoyStiCK и dan-_- рассказали и показали:
😡 Как играть агрессивно за защиту
🔸 Лучшие ранауты и спавнпики на картах «Шале» и «Кафе Достоевский»
💪 Как сломать стратегию противника на первых секундах игры
Смотри видео, запоминай точки и пробуй в следующей игре 🔥
#R6S#GOGOVP