Как передать переменные полученные от пользователя в функцию класса родителя?
Есть класс 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 шт):
Если вы хотите получать быстрые и правильные ответы - предоставляйте минимально-воспроизводимый пример, который демонстрирует проблему.
Как вариант, ваша задача может выглядеть примерно так:
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())