Установить свойства виджета в 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
В рилсах завирусился легчайший способ делать идеальные фото. Чтобы максимально показать шикарный фон, нужно просто отойти на 10 шагов назад и сфотографировать с зумом 2х, 5х или 8х. Так в кадре будете не только вы, но вся красота вокруг.
JDMax#GoodToKnow
В рилсах нашли полезную штуку: гамак для ног в самолёт
Гамак поможет пережить перелёты любой длины. Стоит такой ₽429 на маркетплейсах.
JDMax#GoodToKnow
5 приложений для СДВГшников
Появилась подборка, помогающая держать концентрацию и не теряться в задачах.
Избавляемся от залипаний и фокусируемся.
JDMax#GoodToKnow
Фильтр для воды меняет вкус алкоголя — лайфхак действительно работает. Графин нейтрализует горечь и другие неприятные нотки в спиртных напитках благодаря активированному углю.
Авторы видео профильтровали водку и шнапс, а затем выпили по рюмке напитков: резкий спиртовой привкус полностью пропал.
JDMax#GoodToKnow
Информация для тех, кто планируют отдых в Турции — в Яндекс Картах теперь есть цены на весь транспорт Стамбула, от метро до паромов и фуникулеров.
При построении маршрута приложение рассчитывает стоимость всей поездки с учетом пересадок, а также показывает цену проезда отдельно по каждому виду транспорта.
JDMax#GoodToKnow
#goodToKnow
Volontyorlik = ko‘ngillilik, nafaqat jamiyatga, balki volontyorning o‘ziga ham foyda keltiradi 🖐❤
➕ Volontyorlar=ko‘ngillilar o‘zlariga qiziq bo‘lgan ishlariga kuch va bilim sarflash orqali ma‘nan rivojlanadilar, o‘zlarida "soft skills" ko‘nikmalarini shakllantiradilar. Volontyorlar duo, tabassum, baxtli chehralar, rahmat so‘zlarini bildirgan ko‘zlaridan kuch olishadi.
➕ Volontyorlik faoliyatidan jamiyat oladigan foyda ham aniq - dunyo bo‘ylab bir qator tashkilotlar moliyaviy qiyinchiliklarni kechirgan, shu o‘rinda, aholining himoyaga muhtoj qatlami alohida e‘tiborga sazovor bir paytda, volontyorlar o‘zlarini kerakli his qiladigan payt kelgan, volontyorlik faoliyati jamoatchilik e‘tiborini bugungi kun muammolariga qaratadi, ayrim hollarda esa bu muammolarni yechimiga aylanadilar.
#volontyorlarOilasi#uva
#bizBirgamiz
🖐❤️🖐💚🖐💙🖐❤️🖐💚🖐💙🖐❤
Volontyorlar uchun saralangan yangiliklar ⬇️
Telegram | Instagram | Facebook | web
Word of the day
📚 Obsolete
📝 Meaning: old-fashioned, smth that is not used anymore
✅ Bowing to greet a lady is now an obsolete custom.
#ieltsnine, #newword, #wordoftheday, #expedientrubric, #goodtoknow, #nicevocabulary, #lexicalresource, #improveyourielts
No show дегеніміз не?ℹ️
Сатылымда билеттер жоқ болып, ұшақ бортында бос орын болғанын байқадыңыз ба?
Ондай қашан болуы мүмкін?
✅Жолаушылар әуетасымалдаушыға хабар бермей, рейске келмеген жағдайда
✅Жолаушылар рейске кешігіп келген кезде
❗️Бұл кезде билет күйіп, билет құны қайтарылмайды.
Егер жолаушы ұшып шығу туралы шешімін өзгертсе, онда тариф шартарына сай ұшуға кем дегенде 2 сағат қалғанда брондауды өзгертіп немесе ақша қайтарымын орындай алады
*брондауды өзгерту немесе қайтарым жасау үшін, билетті сатып алған жерге хабарласу керек
•
Что такое no show? ℹ️
Замечали ли вы, что иногда авиабилетов на определённый рейс не бывает, но во время полёта некоторые места все-таки пустуют?
Такое возможно когда...
✅Пассажиры не пришли на рейс, не уведомив авиаперевозчика об этом
✅Опоздали на рейс
❗️В этих случаях билеты пассажиров сгорают, а их стоимость не возвращается.
В случае, если пассажир меняет своё решение о вылете, то он может внести изменения в бронирование или осуществить возврат по условиям тарифа не позднее, чем за 2 часа до вылета
*в случае перебронирования или возврата билета обращаться по месту приобретения
•
What is no show? ℹ️
Have you ever noticed that sometimes for a certain flight the tickets are totally sold out, but during the flight some seats are still empty? It's possible when...
✅Passengers did not show up for a flight without notifying the carrier about it
✅Passengers were late for a flight
❗️In these cases, passenger’s ticket will be void and it's cost will not be refunded.
Therefore please be noted that if you need to make changes in your ticket you can do it no later than 2 hours before the departure according to the rules of the used fare type.
*In case of a rebooking or refund, please contact the point of sale where you have purchased it
•
#flyarystan#lowfares#lowcostairline#travel#сапар#саяxат#путешествие#билет#самолеты#ұшақтар#aircraft#білгенабзал#полезнознать#goodtoknow