Установить свойства виджета в 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
🚢Gotlandsbolaget: выручка растёт, прибыль падает.
Шведская судоходная компания Gotlandsbolaget опубликовала финансовые результаты за 2025 год, показав рост выручки при заметном снижении прибыли.
Годовая выручка достигла SEK 3,74 млрд ($355,7 млн) против SEK 2,62 млрд годом ранее. Основным драйвером роста стало включение в группу круизного маршрута Осло – Копенгаген, который управляется через Go Nordic Cruiseline.
При этом скорректированная операционная прибыль снизилась до SEK 35,3 млн (в 2024 году — SEK 218,2 млн). Чистый результат оказался отрицательным — убыток SEK 87,3 млн, что связано с высокими затратами на запуск новых круизных операций и валютными переоценками средств для строительства судна “Gotland Horizon X”.
Круизный оператор Go Nordic Cruiseline перевёз 711,7 тыс. пассажиров за I-й полный год работы, а партнёрский проект Birka Gotland с Viking Line обслужил 570,5 тыс. пассажиров.
Также компания получила новый государственный контракт на обслуживание линии Готланд — материковая Швеция на период 2027–2035 гг. Однако ежегодная компенсация по нему составит около SEK 280 млн, что на SEK 220 млн меньше текущего уровня.
В ответ на снижение субсидий компания планирует повышать эффективность, увеличивать пассажирские и грузовые объёмы и инвестировать в альтернативное топливо, включая производство биогаза, которое должно начаться в 2026 году.
📌Gotlandsbolaget (Rederi AB Gotland) — шведская судоходная компания, основанная в 1865 году, специализируется на паромных и круизных перевозках в Балтийском море. Компания является публичной и торгуется на Nasdaq Stockholm, при этом значительная доля акций принадлежит частным шведским инвесторам и институциональным фондам.
#FerryShipping#BalticSea#Gotlandsbolaget#CruiseMarket#ShippingFinance
🚢Fjord Line переходит полностью под норвежский контроль.
Норвежская паромная компания Fjord Line консолидирована под контролем двух семейных инвестиционных структур — Kontrari и West Coast Invest, которые выкупили долю инвестиционной группы Ferd. Каждая из сторон теперь владеет по 50% компании.
Сделка знаменует новый этап развития перевозчика, который обслуживает линии между Норвегией и Данией.Fjord Line перевозит около одного миллиона пассажиров ежегодно и выполняет ежедневные рейсы из Бергена и Ставангера в Хиртсхальс, а также из Кристиансанна в Хиртсхальс.
В рамках сделки новые владельцы внесут дополнительный капитал в компанию, что усилит финансовую гибкость и позволит ускорить дальнейшие инвестиции и развитие флота.
По словам CEO Брайана Торстеда Хансена, компания за последние годы была модернизирована и оптимизирована, и теперь находится в наиболее сильной позиции для дальнейшего роста.
📌Fjord Line AS — норвежская паромная компания, основанная в 1993 году, осуществляет пассажирские и грузовые перевозки между Норвегией, Данией и Швецией. Компания является частной и теперь принадлежит норвежским инвестиционным группам Kontrari и West Coast Invest.
#FerryShipping#FjordLine#NordicShipping#PassengerShipping#MaritimeIndustry
🚢Alaska Marine Highway System сокращает флот до шести работающих паромных судов.
Государственная паромная система Alaska Marine Highway System (AMHS) начинает новый сезон, имея в эксплуатации лишь 6 из 9 судов.
Ограничения продолжаются уже более четырёх лет.
По данным Alaska Department of Transportation and Public Facilities, основными причинами являются дефицит экипажей, начавшийся во время пандемии, необходимость капитальных ремонтов и старение флота — по меньшей мере четыре судна эксплуатируются более 50 лет.
Власти объявили тендер на строительство судна - замены для парома “Tustumena”, который традиционно обслуживал маршруты Homer – Kodiak – Алеутские острова. Заявки ожидаются к концу мая.
Из-за нехватки судов штат привлёк частного оператора Allen Marine для выполнения дополнительных рейсов, однако частота перевозок остаётся ограниченной, что особенно затрагивает удалённые населённые пункты. Например, город Юкатан (Yakutat) - не получал регулярного паромного сообщения с 2023 года.
Для регионального судоходства ситуация демонстрирует уязвимость государственных паромных систем к кадровым и инфраструктурным ограничениям, а также усиливает потребность в обновлении флота.
📌Alaska Marine Highway System (AMHS) — государственная паромная система штата Аляска, созданная в 1963 году и управляемая Департаментом транспорта и общественной инфраструктуры штата Аляска. Финансируется полностью из бюджета штата.
#FerryShipping#Alaska#MaritimeTransport#RegionalShipping#Infrastructure