Установить свойства виджета в 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
🥷 The #UXLINK exploiter spent 10.88M $DAI to buy 5,493 $ETH at $1,981 seven hours ago.
On Jan 30, he also spent 16.87M $DAI to buy 203 $WBTC ($13.31M) at $83,225, which is now down $3.56M. link
😕 UXLINK CEO 의 공식 입장문
✅ UXLINK가 DAXA에서 상장폐지를 당한 날, 어렵게 UXLINK CEO를 만나 인터뷰를 진행할 수 있었습니다.
이번 인터뷰를 통해 그는 UXLINK의 공식 입장과 향후 계획에 대해 직접 이야기를 진행하였습니다.
📂 사건 개요 및 대응
🟢사건 발생 : 8월 22일 KBW 기간에, 서명 키 2개가 탈취되어 해커가 일부 스마트컨트렉트를 제어 및 자금 탈취를 진행함
🟢사건의 대응 및 조치 : 남은 자금 긴급 보호 | 보안회사 및 거래소 협력을 통해 자금 추적 및 일부자금 동결 | 경찰 수사 및 복구 절차 진행
🪙 피해 보상 계획
🟢1차 보상안: 해킹 이전 시점 기준으로 1:1 스왑 복구 진행
🟢2차 보상안: DAO와 커뮤니티 협의 후, 추가 단기·장기 보상조치 논의
🟢참여 거래소: OKX, Gate.io 등은 이미 마이그레이션 작업 중
🟢한국 거래소: DAXA 결정으로 일시적 상장폐지 → 재상장 절차 준비 중
🏐 UXLINK 의 향후 비전
🟢UXLINK는 전 세계 5천만 명 사용자를 보유한 SocialFi 플랫폼
🟢토큰의 65%가 커뮤니티에 할당된 구조로, "커뮤니티 중심" 철학 유지
🟢AI 분석 시스템 / PayFi 카드 / 에이전트 기능 도입으로 토큰 활용성 강화 예정
🟢한국 포함 주요 지역 앰배서더 프로그램 확대, 지역 커뮤니티 의견 반영
🟢기존 백서 및 로드맵과 일치할 예정
📱 CEO 의 메시지
한국 커뮤니티 여러분, 어려운 시기에도 변함없이 UXLINK 를 지지해주셔서 진심으로 감사드립니다.
보상 복구는 물론, 투명한 재건 과정을 통해 신뢰를 반드시 회복하겠습니다. 감사합니다
홈페이지 | 트위터 | 한국공식텔레그램
#UXLINK
UXLINK Exploiter has sold 5,496 $ETH for $11.82M $DAI in the past 1 hour.
#UXLINK got hit on september 22, 2025 when attackers took over its multisig wallet, draining more than $44M in the process.
https://intel.arkm.com/explorer/entity/uxlink-exploiter
https://x.com/OnchainLens/status/2034815476908662900
Follow @onchainlens for more onchain updates
⏰ Final 2 weeks to join the UXLINK Supporters Appreciation Event!
Complete the @XerpaAI and #UXLINK FujiCard tasks to earn your $UXLINK airdrops 💰💳
Join now: https://dapp.uxlink.io/season5-extension
Kraken support UXLINK token migration! The New #UXLINK (ERC20) trading and funding is expected to resume by November 7th at 2pm UTC.🚀🇺🇸
https://status.kraken.com/incidents/7tdjqs74dmld
MEXC completes #UXLINK Contract Swap, and will resume $UXLINK ( on ETH mainnet) deposits, withdrawals and trading on Oct.15, 03:30 UTC. ❤️🚀
https://mexc.com/en-GB/announcements/article/mexc-completes-uxlink-uxlink-contract-swap-17827791530866
Bybit has completed the #UXLINK contract upgrade, as well as the token swap and refund process.
UXLINK trading will resume on October 14, 2025, at 11AM UTC.
https://announcements.bybit.com/article/completion-of-uxlink-contract-upgrade-blt9f977c6c135039e9/
Bitget has completed #UXLINK contract swap and will support $UXLINK ( on ETH mainnet) trading and withdrawal on Oct.13 10:00(UTC). ❤️🚀https://bitget.com/support/articles/12560603839560
We have received the notice from DAXA regarding the end of support for $UXLINK (on Arbitrum) by Korean exchanges. The conversion between #UXLINK and Korean exchanges remain active about the new $UXLINK (on Ethereum) swap and compensation plan.
We have intensive user base in South Korea🇰🇷 and are committed to compensate in a fair and transparent manner. Given the extended holiday period in Korea (October 3–12), we will do our best to finalize the proposal after the break.