Когда разрабатываете свой GUI с помощью PyQt для какого-либо софта бывает необходимо позаимствовать цвета из текущего стиля интерфейса. Например, чтобы правильно раскрасить свои виджеты, подогнав их по цвету. Ведь бывает, что ваш GUI используется в разных софтах. Причём некоторые со светлой темой а другие с тёмной.
По умолчанию стили наследуются, но если вы задаёте какую-либо раскраску для части виджета через свой styleSheet, то требуется ссылаться на цвета текущего стиля.
Как это сделать? Как получить нужный цвет из палитры имеющегося стиля? Это достаточно просто, нужно использовать класс QPalette и его роли.
Например, мне нужно достать цвет текста из одного виджета и применить его в другом как цвет фона (не важно зачем именно так, просто захотелось😊).
Получаем палитру виджета и сразу достаём нужный цвет, указав его роль.
from PySide2.QtGui import QPalette
color = main_window.palette().color(QPalette.Text)
теперь можем использовать этот цвет в стилях
my_widget.setStyleSheet(f'background-color: {color.name()};')
Готово, мы динамически переопределили дефолтный стиль используя текущий стиль окна!
На самом деле есть запись покороче, в одну строку и без лишних переменных. Не очень-то по правилам CSS, но Qt это понимает.
my_widget.setStyleSheet('background-color: palette(Text);')
Этот способ не подходит если вам нужно как-то модифицировать цвет перед применением в своих стилях. В этом случае потребуется первый способ.
Зато он прекрасно сработает в файле .qss, то есть не придётся в коде прописывать раскраску отдельных элементов через ссылки на палитру, всё красиво сохранится в отдельном файле .qss!
QListView#my_widget::item:selected {
background: palette(Midlight);
}
Про имеющиеся роли можно почитать здесь🌍
#qt#tricks
https://docs.python.org/3/library/functions.html#classmethod
classmethod(function)
Return a class method for function.
A #class method receives the class as implicit first argument, just like an instance method receives the instance. To declare a class method, use this idiom:
class C:
@classmethod
def f(cls, arg1, arg2, ...): ...
The @classmethod form is a function decorator – see the description of function definitions in Function definitions for details.
It can be called either on the class (such as C.f()) or on an instance (such as C().f()). The instance is ignored except for its class. If a class method is called for a derived class, the derived class object is passed as the implied first argument.
Class methods are different than C++ or Java static methods. If you want those, see staticmethod() in this section.
For more information on class methods, consult the documentation on the standard type hierarchy in The standard type hierarchy.
🧠"Zamonaviy dizayn" kursida biznes savodxonligi va tadbirkorlik ko‘nikmalari
🏛 Biznes va tadbirkorlik oliy maktabi hamda Xalqaro inklyuziv hab hamkorligida “Zamonaviy dizayn” kursiga “Biznes savodxonligi” fani qo‘shimcha fakultativ dars sifatida kiritildi.
➕ Dasturda o‘quvchilar nafaqat ijodiy, balki tadbirkorlik va biznes ko‘nikmalarini ham o‘rganadilar. Ular biznes turlari, tashkiliy-huquqiy asoslar, soliq imtiyozlari, xarajatlarni tahlil qilish, tannarxni hisoblash, narxlarni shakllantirish va foydani baholash kabi muhim ko‘nikmalarni egallaydilar. Bu jarayonda Oliy biznes maktab professori D. Rasulova va malakali mutaxassis B. Ishmuxamedov kabi tajribali o‘qituvchilar o‘quvchilarga bilim va tajribalar ulashdilar.
#GSBE#GraduateSchool#Class#Academic#Study
🔝Web-site |🔝Facebook | 🔝Instagram | 🔝Youtube
http://www.wikipython.com/other-concepts/anatomy-of-a-class/
It seems obvious, but note that you must define a class before you use it.
When you create a #class, it establishes its own namespace and all its own local variables (except global definitions) exist only inside that #namespace. They do not interact with other variables of the same name outside it. This leads us to one very important “feature” of classes that you need to know. If you use the same word to designate some specific value both inside and outside the class blueprint, the instance value will take precedence when you try to use that value.
#learn
https://en.wikipedia.org/wiki/Single_responsibility_principle
The #single_responsibility_principle is a computer programming principle that states that every #module or #class should have responsibility over a single part of the functionality provided by the software, and that responsibility should be entirely encapsulated by the class. All its services should be narrowly aligned with that responsibility. Robert C. Martin expresses the principle as, "A class should have only one reason to change."
https://julien.danjou.info/blog/2013/guide-python-static-class-abstract-methods
Mixing #static, #class and #abstract methods
When building classes and inheritances, the time will come where you will have to mix all these methods decorators. So here's some tips about it.
Keep in mind that declaring a method as being abstract, doesn't freeze the prototype of that method. That means that it must be implemented, but it can be implemented with any argument list.