Установить свойства виджета в 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
Сейчас в портфеле издательства Rosmei следующие известные тайтлы (список не исчерпывающий):
🔹"Как выжить в роли главного злодея" Ии Ии (How to Survive As a Villain by Yi Yi Yi Yi, 2018) 3vols
🔹"Топить в вине бушующее пламя печали" Прист (Drowning Sorrows in Raging Fire by Priest, 2019) 5vols
🔹"Южный алтарь" Тан Цзюцин (Nan Chan by Tang Jiu Qing, 2018) 3vols
🔹"Я тебе нравлюсь, не так ли?" Лю Тяньи (Don't you like me by Lu Tianyi, 2017) 2vols
🔹"Лю Яо: Возрождение клана Фуяо" Прист (Coins of Destiny by Priest, 2014) 4vols
🔹"Земля Онлайн" Мо Чэньхуань (The Earth is Online by Mo Chen Huan, 2017) 8-9vols
🔹"Калейдоскоп смерти" Си Цзысюй (Kaleidoscope of Death by Xi Zixu, 2018) 6vols
🔹"Глобальный вступительный экзамен" Му Сули (Global Examination by Mu Su Li, 2019) 4vols
🔹"Вино и ружьё" Мэнъе Мэнъе (Wine and Gun by Meng Ye Meng Ye, 2020) 7vols (перевод названия вольный)
🔹"Ша Цин или Последний убийца" У И (The Killer of Killers by Wu Yi, 2018) 3vols
🔹"Отбракованные" Прист (The Defectives by Priest, 2017) 6vols
Еще раз покажу обложку детективной новеллы "Wine and Gun" Meng Ye Meng Ye, которую я жду с особым нетерпением.
#China#novel#Rosmei
Очень нравится оформление суперобложек новеллы "Топить в вине бушующее пламя печали" Прист от сингапурского издательства Rosmei.
Обложки первого, четвертого и пятого томов от 鹤止山川 (Twitter)
Издательство взяло за практику выкладывать прологи или первые главы, чтобы читатели могли оценить качество перевода (считаю, что это хорошая стратегия). Вот здесь можно оценить перевод пролога к Лехо. Всего ожидается пять томов.
#China#novel#Priest#LieHuo#Rosmei
Издательство Rosmei показало обложки первых трех томов новеллы Прист "Дефектные" или "Отбракованные" (The Defectives / Can Ci Pin / 残次品) от V.Scorpio. Нравится, что издательство не боится выдавать "абстрактные" обложки без персонажей — выглядит весьма атмосферно.
Всего запланировано 6 томов. На русском сейчас можно прочитать 57 глав из 197 основных (плюс 6 экстр)
#China#novel#Priest#CanCiPin#Rosmei
Издательство Rosmei показало арт, который мы увидим на обложке первого тома новеллы Му Сули "Глобальный вступительный экзамен"
#China#novel#MuSuLi#GaoKao#Rosmei
Внезапное: Rosmei показали обложку первого тома новеллы "Земля Онлайн" Мо Чэньхуаня. А я как раз сегодня закачала ее на свою читалку... Считаю, что знак свыше.
#China#novel#MoChenHuan#EarthIsOnline#Rosmei
Издательство Rosmei показало обложку второго тома новеллы "Wine and Gun" Mengye Mengye. И это просто восторг и трепет...
#China#novel#WineAndGun#MengYeMengYe#Rosmei
Не перестаю удивляться тому, какой широкий охват авторов и жанров демонстрирует издательство Rosmei. Недавно они анонсировали покупку прав на издание двух новелл Нин Юань (Ning Yuan / 宁远) — популярного автора новелл в жанре байхэ (GL). Причем писательница была так мила, что согласилась написать для англоязычных публикаций новелл "At The World's Mercy" (我为鱼肉) и "The Creator's Grace" (造物的恩宠) дополнительные главы.
Сегодня были показаны удивительно красивые арты для будущих обложек новеллы"At The World's Mercy" (257ch+7ex). Всего запланировано 8 томов. Это историческая новелла с тропом "от врагов к возлюбленным", много политики и придворных интриг.
#China#novel#NingYuan#AtTheWorldsMercy#Rosmei
У издательства Rosmei в августе было три анонса детективных новелл — "Wine and Gun" Mengye Mengye (2020), "The Killer of Killers" Wu Yi (2018) и еще одной новеллы, о которой я раньше не слышала. Поскольку сегодня они показали обложки этого двухтомного (!) тайтла, я решила разузнать поподробнее, что это и о чем это.
Автор — Wu Chen Shui (吴沉水). В анонсе новеллу перевели, как "Enchanted", но в итоге поменяли на "Obsessed". Поскольку иероглифы 着魔 допускают оба перевода (и "околдованный", и "одержимый"), видимо, исходили из того, что ближе к сюжету. В новелле 81 основная глава и 12 экстр (2012).
Ссылка на страницу новеллы на сайте jjwxc и на оригинальный текст.
На русский и английский переводов не видела.
Превью первой главы от издательства Rosmei.
Описание: Несколько причудливых убийств обнажают уродливые желания, скрывающиеся глубоко в сердце. Как бы человек ни старался сдерживать себя, убегать от этого и сопротивляться этому, любой может стать одержимым. Кто-то любовью, кто-то ненавистью, кто-то властью, кто-то амбициями. Я одержим тобой, но кем одержим ты?
Предупреждение от издательства: новелла содержит упоминания о насилии и темах, связанных с психическим здоровьем, сексуальным насилием, гомофобией, расизмом и т. д.
#China#novel#WuChenShui#Obsessed#Rosmei#анонсы