Для чего нужны эти функции в PyQt5

Всем добрый день, понимаю что ОЧЕНЬ глупый вопрос, но пожалуйста не могли ли вы простыми словами описать эти фрагменты кода?

class PlotCanvas(FigureCanvas):
    def __init__(self, rbtns, parent=None, width=5, height=4, dpi=100):          
        self.fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = self.fig.add_subplot(111)
        super().__init__(self.fig)

        self.p = parent
        self.rbtns = rbtns
class App(QWidget):    
    def __init__(self):
        super().__init__()
        
        self._global()                                                       
        self.layout = QGridLayout(self)                                      
        self.flag = True                                                     
        self.initUI()
 def closeEvent(self, event):
        self.flag = False
   def initUI(self):
        self.m = PlotCanvas(self.rbtns, self, width=5, height=4)             
        self.layout.addWidget(self.m, 0, 0) 
   def initUI(self):
        self.m = PlotCanvas(self.rbtns, self, width=5, height=4)             
        self.layout.addWidget(self.m, 0, 0) 

Ответы (1 шт):

Автор решения: S. Nick

Объектно-ориентированное программирование (ООП) является методологией разработки программного обеспечения, в основе которой лежит понятие класса и объекта, при этом сама программа создается как некоторая совокупность объектов, которые взаимодействую друг с другом и с внешним миром.
Каждый объект является экземпляром некоторого класса.
Классы образуют иерархии.

Выделяют три основных "столпа" ООП - это инкапсуляция, наследование и полиморфизм.

Наследование — это процесс, когда один класс наследует атрибуты и методы другого. Класс, чьи свойства и методы наследуются, называют Родителем или Суперклассом. А класс, свойства которого наследуются — класс-потомок или Подкласс.

Класс может содержать атрибуты и методы.
Метод – это функция, находящаяся внутри класса и выполняющая определенную работу.

# определяем класс App, наследуя его от класса QWidget.  
class App(QWidget):  
    # Конструктор класса и инициализация экземпляра класса:  
    # для инициализации экземпляра класса используется метод __init__(self),
    # в котором можно задать параметры объекта при его создании.
    # 
    # self – это ссылка на текущий экземпляр класса
    def __init__(self):
        # super – это ключевое слово, которое используется для обращения к родительскому классу.
        super().__init__()
        
        self._global()                  # вызов метода _global()                                               
        self.layout = QGridLayout(self) # создаем объект класса QGridLayout                                 
        self.flag = True                # атрибут flag, кот. присвоено значение True, 
                                        # при их создании было использовано ключевое слово self.        
        self.initUI()                   # вызов метода initUI()

    # метод 
    def initUI(self):
        # создаем объект класса PlotCanvas
        self.m = PlotCanvas(self.rbtns, self, width=5, height=4)  
        # размещаем объект self.m в менеджере компановки  self.layout
        #          в первую строку -->v  v<--- в первый столбец          
        self.layout.addWidget(self.m, 0, 0)  

    # closeEvent метод унаследованный из класса QWidget,
    # который вызывается с заданным событием, когда Qt получает запрос 
    # на закрытие окна для виджета верхнего уровня от оконной системы.
    def closeEvent(self, event):
        self.flag = False   # объекту flag, присвоено новое значение False 


Так как вы используете графический интерфейс, вам следует использовать холст соответствующего бэкэнда, чтобы не было конфликта циклов событий.

В конечном итоге класс PlotCanvas это виджет.

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
...


class PlotCanvas(FigureCanvas):
    def __init__(self, parent=None, width=5, height=4, dpi=100):
        self.fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = self.fig.add_subplot(111)
        super().__init__(self.fig)

        self.p = parent                                                   
...
        

class App(QWidget):    
    def __init__(self):
        super().__init__()
        ...
        self.initUI()
        ...
    ...
    def initUI(self):
        self.m = PlotCanvas(self, width=5, height=4)
        self.layout.addWidget(self.m, 0, 0) 
...
        
→ Ссылка