Как передать переменные полученные от пользователя в функцию класса родителя?

Есть класс MainWindow(), в котором есть QListWidget и кнопка QPushButton.
Кнопка открывает виджет, который прописан в отдельном классе Form().
В Form() есть поля, которые заполняет пользователь, которые сохраняются в переменные.

Цель такая, после заполнения полей и проверки на правильность, я пытаюсь передать эти переменные в функцию Add(), с целью записи их сразу в listWidget, которая находится в классе MainWindow().

Ну и проблема в том, что переменные передаются, а команда self.ui.listWidget.addItem(переменная) выдает ошибку по причине того, что у класса Form нет атрибута ui.

Как я понимаю у него нет и самого listWidget. Ну вроде суть объяснил.
Подскажите каким способом вообще можно это провернуть?! запустить функцию от имени класса родителя там или вернуть управление в MainWindow().

main.py:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QLabel, QWidgetItem, QListWidget
from PyQt5.QtCore import Qt
from ui_main import *
from ui_add_area import *


class MyWin(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.count = 1000
        self.ui.pushButton.clicked.connect(self.add_areas)

    def add_app(self):
        
        print(result)
        self.ui.listWidget.addItem(result) # тут ошибка при вызове функции
           

    def add_areas(self):
        form = AddArea(self)
        form.show()

class AddArea(QtWidgets.QWidget):
    def __init__(self, parent=MyWin):
        super().__init__(parent, QtCore.Qt.Window)
        self.uiAddArea = Ui_Form()
        self.uiAddArea.setupUi(self)
        self.setWindowModality(2)
        self.uiAddArea.pushButton.clicked.connect(self.add_area)

    def add_area(self):
        area_number = self.uiAddArea.textEdit.toPlainText()
        area_name = self.uiAddArea.textEdit_2.toPlainText()
        creator_block = self.uiAddArea.comboBox.currentText()
        if area_number.isdigit() and len(area_name) > 0:
            result = f"Заявка № {area_number}\n{area_name}"

            self.close()
            MyWin.add_app(result) #!!!! вот этот момент

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

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

Если вы хотите получать быстрые и правильные ответы - предоставляйте минимально-воспроизводимый пример, который демонстрирует проблему.

Как вариант, ваша задача может выглядеть примерно так:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *

# ? from ui_main import *                                       # ???
# ? from ui_add_area import *                                   # ???


class AddArea(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent, QtCore.Qt.Window)
        
# ?        self.uiAddArea = Ui_Form()
# ?        self.uiAddArea.setupUi(self)
        
        self.setWindowModality(2)
        
        self.parent = parent                                    # +++
        
        self.pushButton = QPushButton('Add_Area')
        self.pushButton.clicked.connect(self.add_area)
        
        self.textEdit = QTextEdit()
        self.textEdit_2 = QTextEdit()
        
        layout = QGridLayout(self)
        layout.addWidget(self.textEdit, 0, 0)
        layout.addWidget(self.textEdit_2, 0, 1) 
        layout.addWidget(self.pushButton, 1, 0, 1, 2)        

    def add_area(self):
        area_number = self.textEdit.toPlainText().strip()       # + strip()
        area_name = self.textEdit_2.toPlainText().strip()       # + strip()
#?        creator_block = self.comboBox.currentText()   
        
#        if area_number.isdigit() and len(area_name) > 0:
        if area_number.isdigit() and area_name:
            result = f"Заявка № {area_number}\n{area_name}"

            self.close()
#            MyWin.add_app(result)                     # !!! вот этот момент
            self.parent.add_app(result)                         # !!! +++
            

# class MyWin(QMainWindow, Ui_MainWindow):
class MyWin(QMainWindow):
    def __init__(self):
        super().__init__()

#        self.setupUi(self)

        self.centralwidget = QWidget()
        self.setCentralWidget(self.centralwidget)

#?        self.count = 1000

        self.pushButton = QPushButton('Открыть диалог')
        self.pushButton.clicked.connect(self.add_areas)
        
        self.listWidget = QListWidget()
        
        layout = QVBoxLayout(self.centralwidget)
        layout.addWidget(self.listWidget)
        layout.addWidget(self.pushButton)

    def add_app(self, result):
        print(result)
        self.listWidget.addItem(result)              # тут быда ошибка
    def add_areas(self):
        form = AddArea(self)
        form.show()
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    sys.exit(app.exec())

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка