Установить свойства виджета в 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
🪂Newairdrop ~ Iron Titanium ✅️
💲 Reward: worth of 55,000 $TITAN + for each 10,000 #TITAN and top 300 refer and earn 600$usdt each more referrals
🌐WebsiteTiTan
💎 Presents Ratings: ⭐⭐⭐
👑Winners: 20,000 people valid participants will be randomly rewarded.
➡️Airdrop Bot For Iron Titanium
↪️ Join their Telegram group. and Telegram Channel. (Mandatory:)
↪️ Follow their Twitter, like and retweet the pinned post by tagging 3 of your friends. (Mandatory:)
↪️ Follow their Instagram
↪️ Submit your details to the Airdrop bot.
ℹ️Distribution date: announced by the project is the Immediately 55,000 Titan Withdraw .
🌎 Saturn’s moon Titan is the only place in the Solar System, other than Earth, with stable liquid lakes on its surface. These lakes are filled not with water, but with methane and ethane, and cover hundreds of square kilometers. ✨
#astronomy⚡#planets⚡#titan
👉subscribe Interesting Planet
👉more Channels
Голова для очень тяжёлых камер #titan ну так позиционируют Стоимость порядка 55 000 долларов, поставки будут в августе #bts#оборудование#newsfidllercom
🇬🇧Bloodborne_Free Comic Book Day #01
🇷🇺Передающийся через кровь_День Бесплатных Комиксов #01
Действие происходит в мире Bloodborne.
Город Ярнам, древний готический мегаполис в мире богов и монстров, пострадал от кошмарной чумы.
Церковь Исцеления, известная своими чудодейственными препаратами на основе крови, не знает, откуда взялась таинственная болезнь Пепельной Крови и как предотвратить её распространение среди жителей Ярнама.
По улицам в поисках зверей бродят Охотники - первая линия обороны от безумия. Но не всех монстров так легко распознать – в домах и сердцах людей страх и горе могут породить новый тип мучений…
#комикс#comics#bloodborne
#titan
🪐 Beneath the thick ice of Saturn’s moon Titan, scientists suspect there is a hidden ocean of liquid water mixed with ammonia, possibly deeper than 50 kilometers below the surface. Titan’s dense atmosphere, rich in methane, and its secret subsurface sea make it one of the most fascinating candidates for harboring life far from Earth. ✨
#moons⚡#oceans⚡#titan⚡#nasa⚡#galaxy⚡#stars⚡#astronomy⚡#universe⚡#cosmos⚡#space
👉subscribe Universe Mysteries
👉more Channels
🪐 NASA's upcoming Dragonfly mission will send a robotic drone to Saturn’s moon Titan, using a nuclear-powered rotorcraft to explore its thick atmosphere and icy surface. This spacecraft will hop from site to site in search of complex organic molecules, pushing the boundaries of interplanetary exploration beyond anything ever attempted in the outer solar system. ✨
#spaceships⚡#exploration⚡#Titan⚡#nasa⚡#galaxy⚡#stars⚡#astronomy⚡#universe⚡#cosmos⚡#space
👉subscribe Universe Mysteries
🪐 Saturn’s moon Titan is surrounded by a thick atmosphere richer in nitrogen than Earth’s, and it’s the only moon in our solar system with dense clouds and surface lakes made of liquid methane and ethane. This unique chemistry, combined with Titan's size—larger than the planet Mercury—makes it a standout among the many moons of the giant planets, offering a world where clouds, rain, and rivers exist far from the Sun. ✨
#giantplanets⚡#titan⚡#atmosphere⚡#nasa⚡#galaxy⚡#stars⚡#astronomy⚡#universe⚡#cosmos⚡#space
👉subscribe Universe Mysteries
👉more Channels
🇬🇧Dark Souls_The Willow King #1-4
🇷🇺Темные Души_Ивовый Король #1-4
Могучий король Утрель однажды возжёг пламя, но прежде его слуга рыцарь Герад не смог этого сделать, был поглощён пламенем и обратился в прах. Теперь пришла пора снова возжечь пламя, но Утрель воспротивился этому, став Ивовым Королём. Герад же возродился Негорящим и теперь должен объединить под своим командованием трёх могучих воинов. Они отправятся в логово Ивового Короля, чтобы заставить того исполнить долг перед королевством и человечеством.
#комикс#comics#темныедуши#darksouls
#titan