Установить свойства виджета в 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
Atoms Research | ꘜ
➡️Etherscan 10th Anniversary Campaign
• Earn points in limited-time campaigns
• Redeem them for rewards as they roll out
• Show off your special badge across the explorer
Campaign runs until Aug 31, 2025 (T&Cs apply)
🔗 Farm points here
More details here
#etherscan
💬Discuss in the chat
👨💻 Блокчейн-обозреватель Etherscan представил бета-версию инструмента Code Reader на базе искусственного интеллекта для анализа исходного кода смарт-контрактов.
В качестве примеров использования ИИ-решения разработчики назвали:
✔️ обзор кода для лучшего понимания его внутренней работы;
✔️ получение списка функций чтения/записи данных в Ethereum с подробными объяснениями;
✔️ изучение интеграции dapps.
#Etherscan#AI
#gwei#ETH#Etherscan
🔥Что такое газ в Ethereum и как он влияет на транзакции?
В экосистеме Ethereum термин «газ» играет ключевую роль, определяя стоимость выполнения транзакций и операций внутри сети. Понимание концепции газа необходимо для эффективного взаимодействия с блокчейном Ethereum.
❓Понятие газа в Ethereum
Газ в Ethereum — это единица измерения вычислительных ресурсов, необходимых для выполнения операций, таких как транзакции или запуск смарт-контрактов. Каждая операция в сети требует определенного количества газа, пропорционального сложности и объему вычислений. Этот механизм предотвращает перегрузку сети и защищает ее от потенциальных атак.
😏Как рассчитывается стоимость газа
Стоимость газа определяется двумя основными параметрами: лимитом газа и ценой газа.
Лимит газа: максимальное количество газа, которое пользователь готов потратить на выполнение операции. Например, стандартная транзакция перевода ETH между адресами требует лимита газа в 21 000 единиц.
Цена газа: стоимость одной единицы газа, выраженная в Gwei. 1 Gwei равен 0,000000001 ETH. Цена газа зависит от текущей загруженности сети; при высокой активности она увеличивается, чтобы стимулировать майнеров обрабатывать транзакции с более высокими комиссиями.
Общая комиссия за транзакцию рассчитывается путем умножения лимита газа на цену газа. Например, при лимите газа 21 000 и цене газа 20 Gwei, комиссия составит:
21 000 * 20 Gwei = 420 000 Gwei = 0,00042 ETH
🙏Факторы, влияющие на стоимость газа
Стоимость газа может значительно варьироваться в зависимости от нескольких факторов:
Загруженность сети: в периоды высокой активности, такие как популярные ICO или запуск новых децентрализованных приложений (dApps), спрос на вычислительные ресурсы увеличивается, что приводит к росту цен на газ.
Сложность операций: взаимодействие со смарт-контрактами или выполнение сложных операций требует большего количества газа по сравнению с простыми транзакциями.
Приоритет транзакции: пользователи могут установить более высокую цену газа, чтобы их транзакции были обработаны быстрее, особенно в загруженные периоды.
🤑Способы оптимизации затрат на газ
Чтобы минимизировать расходы на газ, рекомендуется:
Отслеживать загруженность сети: планировать транзакции в периоды низкой активности, когда цены на газ обычно ниже.
Устанавливать оптимальную цену газа: использовать сервисы мониторинга, такие как Etherscan Gas Tracker, для определения текущих цен на газ и выбора оптимальной стоимости для вашей транзакции.
Оптимизировать смарт-контракты: разработчики могут улучшать код своих смарт-контрактов, чтобы снизить потребление газа при их выполнении.
Понимание механизма газа в Ethereum позволяет эффективно управлять затратами и обеспечивает более плавный опыт взаимодействия с сетью.
👉Чтобы быть в курсе последних новостей и аналитики в мире криптовалют, подписывайтесь 👍на наш канал.
___________
@MirraChannel😎
🚀 Etherscan Enhances Contract Page with New Features
Etherscan has announced a revamp of its contract page, introducing an IDE-style code browser. According to Foresight News, the update includes features such as file tree navigation, multi-file tabs, contract outline jumping, and cross-file keyword search.
The redesign also improves the interaction interface for reading and writing contract pages, aiming to enhance the user experience in reading and operating smart contracts. Users can now switch to full-screen mode and open matching contract codes directly in Blockscan and Ethereum Remix for editing.
#Etherscan#SmartContracts#Blockchain#Ethereum#CodeBrowser#DeveloperTools#Crypto#IDE#BlockchainDevelopment#TechUpdate#ETH