Установить свойства виджета в 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
BTS’ “Permission To Dance On Stage - Live” becomes the First Live Album by an Asian Act to enter the Top 10 of the Worldwide Apple Music Album Charts!
CONGRATULATIONS BTS
#CHARTS
•@OUR_7_PRINCES•
“Dynamite” has surpassed 2.1 billion streams on Spotify, BTS's first song to do so!
Congratulations bts 💜
Let's get that 2B for the MV too.
https://youtu.be/gdZLi9oWNZg?si=MK1oUNrKA-X2B0S0
#CHARTS | #SPOTIFY
•@OUR_7_PRINCES•
"Butterfly" by BTS now hits 300 Million streams on Spotify, becoming their 44th song to do so..!
CONGRATULATIONS BTS
#CHARTS | #SPOTIFY
•@OUR_7_PRINCES•
📊| @/BTS_twt's “PERMISSION TO DANCE ON STAGE – LIVE” (14.5M) breaks the record as the BIGGEST DEBUT for a live album in spotify's HISTORY, surpassing Beyonce ‘Homecoming: The Live Album’ (8.5)!
CONGRATULATIONS BTS
RECORD MAKER BTS
BTS GREATEST OF ALL TIME
#CHARTS | #SPOTIFY
•@OUR_7_PRINCES•
🌍| #PTD_ON_THE_STAGE_LIVE album on itunes —
#1. Australia
#1. Austria
#1. Brazil
#1. France
#1. India
#1. Philippines
#1. Spain
— 7 #1 around the world so far!
Apple Music : https://music.apple.com/in/album/permission-to-dance-on-stage-live/1823627665
Spotify link : https://open.spotify.com/album/7xLhqoM0ilHRKUg2irVSDI?si=VaQHZroSQY2V7tdhnz0oeg
#CHARTS | #iTUNES
•@OUR_7_PRINCES•
#go#chart#charts#cncf#helm#kubernetes
Helm is a tool that helps manage applications on Kubernetes. It simplifies deploying and managing apps by using pre-configured packages called Helm Charts. These charts include all the necessary resources for an application, making it easy to install, update, or remove apps with just a few commands. This saves time and reduces errors, as you only need to edit a single file to change settings across different environments. Using Helm boosts productivity and makes deploying complex applications much easier.
https://github.com/helm/helm
#other#awesome#chartjs#charts#integrations#plugins#resources
Chart.js is a flexible JavaScript library for creating interactive charts with extensive customization options. You can use it with popular frameworks like React, Vue, and Angular through dedicated adapters, and extend its functionality with plugins for styling, features, and data handling. The library supports three major versions—v2 (April 2016), v3 (April 2021), and v4 (November 2022)—each with different plugin compatibility. This means you can choose the version that best fits your project needs and find compatible extensions for charts, animations, zooming, data labels, and more. Whether you need basic charts or advanced visualizations with custom interactions, Chart.js provides the tools to build professional data displays efficiently.
https://github.com/chartjs/awesome
#typescript#charts#data_grid#data_table#date_picker#date_range_picker#hacktoberfest#react#time_picker
MUI X provides advanced React components like Data Grids, Date Pickers, Charts, and Tree Views for building data-rich apps, offering free MIT-licensed tools for basic needs and paid Pro/Premium plans with advanced features like server-side data handling and AI assistance, saving development time with ready-made solutions while allowing customization for any design system[1][2][4].
https://github.com/mui/mui-x