TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки

TGINSIGHT SIMILAR POSTS

Најди сличен содржај

Изворен канал @pythonotes · Post #381 · 23 окт.

Установить свойства виджета в 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

Hashtags

Резултати

Пронајдени 3 слични објави

Пребарај: #jinja

当前筛选 #jinja清除筛选
djangoproject

@djangoproject · Post #562 · 27.01.2018 г., 07:22

https://medium.com/@Pinterest_Engineering/how-we-switched-our-template-rendering-engine-to-react-a799a3d540b0 How we switched our template rendering engine to #React In 2015, we made the decision to migrate our legacy web experience to React to keep up with our fast growth and perform better with increased developer velocity. When we began this project, Pinterest.com was humming along on the existing architecture for some time. On the server, #Django, a Python web application framework, served our web requests and #Jinja was rendering our #templates. The server response to the browser included all the markup, assets and data the browser needed to fetch our JavaScript, images and CSS, and initialize our client-side application. Nunjucks, a JavaScript template rendering engine that uses the same template syntax as Jinja, did all subsequent template renders on the client side.

djangoproject

@djangoproject · Post #362 · 03.07.2017 г., 19:33

https://stackoverflow.com/questions/30288351/how-to-setup-django-1-8-to-use-jinja2 The #Jinja template folder for app dirs defaults to #jinja2 not the standard templates folder. So try the following directory structure and #Django will locate your Jinja #templates: mysite mysite myapp jinja2 myapp index.html manage.py And instead of: return render(request, 'myapp/index.html') you should write: return render(request, 'index.html')

GitHub Trends

@githubtrending · Post #15412 · 14.01.2026 г., 16:30

#jinja#ansible#ansible_collection#collection#devsec#hacktoberfest#hardening#linux#mysql_hardening#nginx#nginx_hardening#os_hardening#playbook#protection#role#ssh_hardening#sysctl devsec.hardening is an Ansible collection that battle-tests security hardening for Linux (CentOS, AlmaLinux, Rocky, Debian, Ubuntu, etc.), MySQL, Nginx, and SSH, matching DevSec Inspec baselines. Install via `ansible-galaxy collection install devsec.hardening` and apply roles like os_hardening easily. It saves you time by automating secure configs across servers, cuts manual work, boosts compliance, and shrinks attack surfaces for safer systems. https://github.com/dev-sec/ansible-collection-hardening