Установить свойства виджета в 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
Что такое cash flow?
Выражение «стабильный cash flow с перспективами капитального роста» означает, что объект (в данном случае апарт-отель **FREEDOM**) сочетает два ключевых преимущества для инвесторов:
1. Стабильный cash flow (денежный поток).
- Регулярный доход от аренды (гарантированные и ежемесячные выплаты инвесторам).
- Минимизация рисков благодаря гарантированным платежам на основе договора на 10 лет с дальнейшей пролонгацией.
- Предсказуемость финансовых поступлений (за счет графика выплат).
2. Перспективы капитального роста.
- Увеличение рыночной стоимости объекта со временем (например, за счет роста цен на недвижимость в районе, развития инфраструктуры или улучшения репутации проекта).
- Возможность продажи объекта в будущем по более высокой цене, чем первоначальные вложения.
Почему это важно для инвесторов?
- Cash flow обеспечивает быстрый возврат инвестиций и пассивный доход.
- Капитальный рост даёт долгосрочную прибыль при перепродаже.
Для апарт-отеля FREEDOM это означает, что инвестор получает:
✔ ежемесячные выплаты от аренды (например, 8–12% годовых);
✔ рост стоимости недвижимости (например, на 5–15% в год за счет развития района и спроса).
Это классическая модель «купил – получай доход – продавай дороже», популярная в коммерческой недвижимости.
Если переписать другими словами формулировку, то будет звучать так:
«гарантированный доход от аренды + рост стоимости ваших вложений».
Друзья, если у вас есть какие-то вопросы, пишите их в комментариях, мы с радостью ответим, разберем все на простом и понятном языке!
#FreedomEkb
#cashflow
"У нас нет денег на ваш аппарат". Что отвечать, если у клиники пустой cash flow
Коллеги, сегодня хочу дать полета фантазии. Когда клиент говорит, что денег нет, лично я считаю, что это лучший момент для продажи. Когда клиника говорит "нет денег", она не отказывается от решения, а кричит о своей главной боли: "Не могу позволить себе простой и неэффективность". Ваша задача - не спорить, а перевести разговор с цены чека на стоимость владения (TCO) и показать путь. Фраза о деньгах - это начало диалога о деньгах, а не его конец.
📊Скрипт из 3 шагов: от возражения до предложения
ШАГ 1: Признать и перевести в аудит боли
Не спорьте. Скажите: "Понимаю, бюджет на закупки ограничен. Давайте проверим, будет ли аппарат нагрузкой или источником cash flow. Для этого нужны три цифры: текущая загрузка вашего парка в часах, средний чек исследования и сколько пациентов вы теряете в месяц из-за нехватки мощностей?".
Финансовая логика: Вы начинаете совместный расчет стоимости проблемы, которую решаете.
ШАГ 2: Показать TCO и альтернативу деньгам
На основе цифр клиента считайте не цену аппарата, а цену его отсутствия. "Если ваши потери из-за нехватки мощностей - X рублей в месяц, то реальная ежемесячная стоимость нового аппарата для бизнеса: (цена/60) - X. Часто эта цифра отрицательна - аппарат зарабатывает с первого дня. А если нет - используем инструменты, чтобы не трогать оборот: операционный лизинг с оплатой из выручки или подписка, где в абонентскую плату входит и сервис".
Финансовая логика: Вы показываете, что аппарат - это инструмент монетизации существующего, но неудовлетворенного спроса, и сразу даете финансовые "мостики".
ШАГ 3: Предложить тест-драйв на условиях клиента
"Чтобы снять риски, давайте пилот. Размещаем аппарат на 3 месяца по модели подписки или лизингас оплатой за исследование. Вы платите только за факт. Через 90 дней у вас будут свои данные по cash flow. Не сработало - забираем. Сработало - переводим на постоянную модель.
Финансовая логика: Вы продаете не железо, а гарантированный результат и снятие риска. Это меняет всю экономику сделки.
Вопрос к вам: Какое нефинансовое условие (бесплатное обучение врачей, помощь в продвижении услуги, включение в рекламную кампанию) чаще всего становится решающим аргументом для вашего клиента при напряженном бюджете? Поделитесь в комментариях.
#B2Bпродажи#переговоры#лизинг#TCO#управлениеклиникой#cashflow
Payment Delays Cost Businesses Billions
Startup ideas can emerge from ordinary problems. A staggering 50% of invoices go unpaid past the due date, leading to cash flow issues for suppliers. In the US alone, this amounts to $825 billion in challenges. Tech platforms successfully address these issues, with one experiencing a 6x revenue increase last year.
For more info, check the full article here.
Additionally, the Bitcoin dominance index recently hit a four-year high, surpassing 64%.
#PaymentIssues#Startups#Finance#CashFlow#Invoices#TechSolutions#Bitcoin#Crypto#VC