Установить свойства виджета в 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
📱 OnePlus o‘zining flagman modeli OnePlus 15ni taqdim etdi
ℹ️ Yangi model dizayni jihatidan kompakt OnePlus 13Tga yaqinlashgan: to‘g‘ri, mat pardali ramkalar, tekis displey va dumaloq burchakli kvadrat kamera bloki.
⚙️ Ichida esa kutganimizdek Snapdragon 8 Elite Gen 5 chip o‘rnatilgan bo‘lib, u “kosmik sinf” aerogel bilan jihozlangan yangi sovutish tizimi bilan sovutiladi.
🔋 Batareya esa butunlay o‘sdi — 6000 mAh dan 7300 mAh gacha.
✅ Asosiy texnik xususiyatlari:
- Displey: 6,78″ 1,5K LTPO OLED, 1-165 Hz
- Chipset: Snapdragon 8 Elite Gen 5
- Kameralar: 50 Mp (IMX906, 1/1,56″) + 50 Mpx keng burchak (116°) + 50 Mp telefoto (3,5×) + 32 Mp selfie
- Xotira varianti: 12+256 GB, 16+256 GB, 12+512 GB, 16+512 GB, 16+1024 GB
- Aloqa: 5G, NFC, Wi-Fi 7, Bluetooth 6.0
- Biometriya: displey ostida ultratovushli barmoq izi skaneri, yuzni aniqlash
- Suvga chidamlilik: IP66/68/69/69K
- Akkumulyator & zaryadlash: 7300 mAh, 120 W simli zaryad, 50 W simsiz zaryad
💵 Narxi: $562
➡️#oneplus | Birinchi raqamli IT-Blog
📱 Qualcomm yana bir bor MediaTek’ni ortda qoldirdi
ℹ️ Snapdragon 8 Elite’ga ega so‘nggi OnePlus 13 dunyodagi eng kuchli smartfon bo‘lib, u Xiaomi 15’dan ancha tezroq ishlaydi. Yangi avlodning flagman smartfonlari birinchi marta AnTuTu reytingiga kiritildi: deyarli barcha top-10 eng kuchli smartfonlar ro'yxati yangilandi, oktyabr oyidagi ro‘yxatda esa OnePlus 13 yetakchidir.
📊 Ayni paytda reytingda Snapdragon 8 Elite’da to‘rtta va Dimensity 9400’da beshta model bor: yangi top-end Qualcomm SoC’dagi modellarning eng yaxshisi Vivo X200 Pro uchinchi o‘rinda. Shunday qilib yana bir marta Qualcomm flagman platformasi MediaTek platformasidan tezroq ishlaydigan bo'lib chiqdi.
➡️#oneplus | Birinchi raqamli IT-Blog
📱 OnePlus 13 bilan tanishing
ℹ️ Tashqi ko'rinishi asosan o'zidan oldingi modelni eslatadi va deyarli o'zgarishsiz qoldi. Mish-mishlarga ko'ra, smartfon quyidagi xususiyatlarga ega bo'ladi:
• Displey: 6,8 dyuym 3168x1440 AMOLED, 120 Hz
• Chipset: Qualcomm Snapdragon 8 Gen 4 yoki Snapdragon 8 Elite
• Kameralar: asosiy 50 MP + eni 50 MP + 50 MP periskop + 50 MP selfi
• Suvga chidamliligi: IP69
• Xotira: 24 GB / 1 TB gacha
• Batareya va zaryadlash: 6000 mA/soat, 100 W, 50 W simsiz
📅 Smartfon taqdimoti 31-oktabrda bo‘lib o‘tadi va global taqdimotni 2025-yil boshida kutish mumkin.
➡️#oneplus | Birinchi raqamli IT-Blog
📱Shu brendga mehrim bo'lakcha lekin
ℹ️ OnePlus Nord 4 smartfoni to'liq metal korpusga ega bo'lib, Mercurial Silver, Oasis Green va Obsidian Midnight ranglarida taqdim etiladi. Qurilma AI Audio Summary, AI Note Summar, AI Linkboost hamda AI Groupfie deb nomlangan sun'iy idrok texnologiyalariga ega hamda Android 14 bazasidagi Oxygen OS 14.1'da ishlaydi.
⚙️OnePlus Nord 4 texnik xususiyatlari:
- Displey: Fluid AMOLED, 6,74 dyuym, ruxsati 1240x2772 piksel,
yangilanish tezligi 120 Hz, eng yuqori yorqinligi 2150 nits, HDR10+;
- Protsessor: Snapdragon 7+ Gen 3 (2,8 gigagertsli), Adreno 732 grafik;
- Operativ xotira: 8/12/16 GB;
- Ichki xotira: 128 / 256 / 512 GB;
- Asosiy kamera: 50 MP (f/1.8) + 8 MP (f/2.2);
- Old kamera: 16 MP (f/2.4);
- Batareya: 5500 mA/soat, zaryadlash 100 W;
- Operatsion tizim: Android 14 asosidagi OxygenOS 14.1;
- Boshqalar: NFC, stereo dinamiklar, displey ostidagi barmoq izlari skaneri;
- Olchamlari: 162,6×75×8 mm;
- Og'irligi: 199,5 g.
💸 Yevropada OnePlus Nord 4 12/256 GB versiyasi uchun 499 yevro, 16/512 GB xotiraga ega kuchli versiyasi esa 599 yevro turadi. Nord Buds 3 Pro minigarniturasi sovg'a sifatida taqdim etiladi. Yangi mahsulot 8-avgustdan sotuvga chiqariladi.
➡️#oneplus | Birinchi raqamli IT-Blog
🤯OnePlus’ 8 Pro has X-ray Vision Filter
it sees through plastic & clothes
Well, firstly, it’s not actual X-ray, though, it's infrared.
This is not a new technology, but it's pretty cool to have it on your #OnePlus#smartphone.
Read more on The Verge.
Video Credit: Ben Geskin.
Watch more tests on UnboxingTherapy.
🦅@perspectiveix