Установить свойства виджета в 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
💎Собрали лендинг за 10 минут
В этом видео мы тестируем v0.dev — инструмент от Vercel, который генерирует интерфейсы и веб‑страницы по простому текстовому описанию.
Мы попросили нейросеть сделать лендинг для нашего будущего стрима: описали тему, добавили спикеров, вставили ссылки на фото. Через пару минут получили готовую страницу.
🥰Всё редактируется прямо в интерфейсе. Мы поменяли подписи, добавили цвета, иконку ТГ и даже поле для отправки сообщения.
Работали на бесплатном тарифе — никаких денег, только немного потраченных промптов (их выдают сразу после регистрации).
Для чего будет удобно:
- Прототипы и лендинги
- UI для MVP или внутренних инструментов
- Быстрая проверка гипотез без дизайнера и верстальщика
#ИИ#AI#Нейросети#V0
———
#Инструменты#Лендинг
Подписывайтесь: @aiforproduct
#typescript#ai_app_builder#bolt#lovable#v0
Dyad is a free, open-source AI app builder that runs entirely on your own computer, giving you full control, privacy, and fast performance without relying on cloud services. You can use your own AI API keys, avoid vendor lock-in, and build full-stack apps easily on Mac or Windows. It offers real-time editing, instant previews, and smooth local development, making app building faster and more private. This means you save money, protect your data, and work more efficiently without subscription fees or limits from other platforms. You just download it and start building right away, no sign-up needed[1][2][4].
https://github.com/dyad-sh/dyad
🔵Сравнили 4 AI-сервиса Prompt-to-App, которые обещают сделать сайт по одному текстовому описанию — без кода, без конструктора и без лишних движений. Проверили, насколько это реально.
⌨️Что тестировали:
— Lovable — простой и быстрый генератор лендингов
— V0.dev — для тех, кто не боится кода (и может поправить его вручную)
— Rork — визуально аккуратный, но генерирует скорее мобильное приложение, а не сайт
— Bolt.new — чат-генератор, который даёт готовую ссылку и позволяет править код
Везде использовали один и тот же промпт, ничего не настраивали. Просто текст → страница.
Подробнее и со ссылками на результаты — в статье на Дзен "Шашков & Головко • AI в решениях"
А ещё сделали короткое видео — как всё работает вживую.
#ИИ#AI#Нейросети#Lovable#V0#Rork#Bolt
———
#Инструменты#Сайт
✍️ Подписывайтесь: @aiforproduct
🚀 Starknet Opens Voting on v0.14.2 Upgrade Proposal
Starknet has announced that voting is now open for STRK holders on the v0.14.2 upgrade proposal. According to Foresight News, the voting period will end on April 16. The proposed upgrade includes the introduction of SNIP-36, SNIP-37, and SNIP-13, and aims to enable protocol-level S-Two proof verification, significantly reducing costs for privacy use cases and zk-thread applications. Additionally, the upgrade seeks to adjust the storage economic model to more accurately reflect network resource usage while maintaining cost advantages for developers. The StarkGate token contract will also be upgraded to optimize ERC-20 event indexing, verification, and token handling. Other internal upgrades are planned to prepare for the decentralized verification phase described in SNIP-33, including improvements in P2P, weighted proposer sampling, and the concept of virtual proposers.
#Starknet#STRK#v0.14.2 #SNIP36#SNIP37#SNIP13#STwoProof#PrivacyUseCases#zkThread#StorageEconomicModel#StarkGate#ERC20#P2P#DecentralizedVerification#SNIP33#VirtualProposers
#other#ai#bolt#copilot#cursor#cursorai#devin#devinai#github_copilot#lovable#open_source#replit#system_prompts#trae#trae_ai#trae_ide#v0#vscode#windsurf#windsurf_ai
You can access a huge collection of over 7000 lines of official system prompts and internal tools from many AI models and agents like v0, Manus, Cursor, Replit Agent, and more. These prompts guide AI to work better by giving clear instructions, which helps the AI give more accurate and useful answers. Using these prompts can save you time, improve AI performance, and make your interactions with AI smoother and more productive. Plus, there’s a free AI security audit service to help protect your AI systems from leaks and hacks, keeping your data safe. Supporting this project helps keep these valuable resources updated.
https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools