PyQT работа с переменными в QDialog

Вопрос, как я могу работать со значениями, которые введены/выбраны в диалоговом окне?

Есть следующий код:

front.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_mainWindow(object):
    def setupUi(self, mainWindow):
        mainWindow.setObjectName("mainWindow")
        mainWindow.resize(800, 380)
        self.centralwidget = QtWidgets.QWidget(mainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.list_1 = QtWidgets.QListView(self.centralwidget)
        self.list_1.setGeometry(QtCore.QRect(20, 20, 221, 192))
        self.list_1.setObjectName("list_1")
        self.list_2 = QtWidgets.QListView(self.centralwidget)
        self.list_2.setGeometry(QtCore.QRect(290, 20, 221, 192))
        self.list_2.setObjectName("list_2")
        self.list_3 = QtWidgets.QListView(self.centralwidget)
        self.list_3.setGeometry(QtCore.QRect(560, 20, 221, 192))
        self.list_3.setObjectName("list_3")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(20, 230, 101, 31))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(140, 230, 101, 31))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(410, 230, 101, 31))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(290, 230, 101, 31))
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_5.setGeometry(QtCore.QRect(680, 230, 101, 31))
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_6.setGeometry(QtCore.QRect(560, 230, 101, 31))
        self.pushButton_6.setObjectName("pushButton_6")
        mainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(mainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        mainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(mainWindow)
        self.statusbar.setObjectName("statusbar")
        mainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(mainWindow)
        QtCore.QMetaObject.connectSlotsByName(mainWindow)

    def retranslateUi(self, mainWindow):
        _translate = QtCore.QCoreApplication.translate
        mainWindow.setWindowTitle(_translate("mainWindow", "MainWindow"))
        self.pushButton.setText(_translate("mainWindow", "+"))
        self.pushButton_2.setText(_translate("mainWindow", "-"))
        self.pushButton_3.setText(_translate("mainWindow", "-"))
        self.pushButton_4.setText(_translate("mainWindow", "+"))
        self.pushButton_5.setText(_translate("mainWindow", "-"))
        self.pushButton_6.setText(_translate("mainWindow", "+"))


class Dialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        label1 = QtWidgets.QLabel('Введите ФИО сотрудника:')
        label2 = QtWidgets.QLabel('Выберите отдел:')
        label3 = QtWidgets.QLabel('Выберите должность:')
        self.QName = QtWidgets.QLineEdit()
        self.QDep = QtWidgets.QComboBox(self)
        self.QDep.addItems(['Otdel1', 'Otdel2', 'Otdel3'])
        self.QPos = QtWidgets.QComboBox(self)
        self.QPos.addItems(['1','2','3'])
        btnOk = QtWidgets.QPushButton("Ok", connect=self.hide)
        layout = QtWidgets.QGridLayout(self)
        layout.addWidget(label1, 1, 1, 1, 1)
        layout.addWidget(label2, 2, 1, 1, 1)
        layout.addWidget(label3, 3, 1, 1, 1)
        layout.addWidget(self.QName, 1, 2, 1, 1)
        layout.addWidget(self.QDep, 1, 2, 3, 3)
        layout.addWidget(self.QPos, 1, 2, 5, 4)
        layout.addWidget(btnOk, 3, 2, 3, 1)

main.py

import sys
from PyQt5 import QtWidgets
import front


class ExampleApp(QtWidgets.QMainWindow, front.Ui_mainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.dialog = front.Dialog()
        self.dialog.resize(300,300)
        self.pushButton.pressed.connect(self.add)

    def add(self):
        self.dialog.exec_()


def main():
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    app.exec_()


if __name__ == '__main__':
    main()

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

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

Представление списка QListView, представление дерева QTreeView и представление таблицы QTableView, основаны на модели, что означает, что операции сбора или хранения данных связаны с моделью.

Следует отметить, что QListView, QTreeView и QTableView являются родительскими классами QListWidget, QTreeWidget и QTableWidget соответственно. Целью последних трех является главным образом облегчить использование и ускорить разработку. По-прежнему принято называть первые три как представления, а последние три - как элементы управления). В сложных комплексных программах первые три все еще рекомендуются.

QStringListModel - Класс предоставляет модель, которая предоставляет строки для представлений.

Я отметил для вас строки, в которые внес изменения:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QStringListModel

#import front

class Ui_mainWindow(object):
    def setupUi(self, mainWindow):
        mainWindow.setObjectName("mainWindow")
        mainWindow.resize(800, 380)
        self.centralwidget = QtWidgets.QWidget(mainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.list_1 = QtWidgets.QListView(self.centralwidget)
        self.list_1.setGeometry(QtCore.QRect(20, 20, 221, 192))
        self.list_1.setObjectName("list_1")
        self.list_2 = QtWidgets.QListView(self.centralwidget)
        self.list_2.setGeometry(QtCore.QRect(290, 20, 221, 192))
        self.list_2.setObjectName("list_2")
        self.list_3 = QtWidgets.QListView(self.centralwidget)
        self.list_3.setGeometry(QtCore.QRect(560, 20, 221, 192))
        self.list_3.setObjectName("list_3")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(20, 230, 101, 31))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(140, 230, 101, 31))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(410, 230, 101, 31))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(290, 230, 101, 31))
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_5.setGeometry(QtCore.QRect(680, 230, 101, 31))
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_6.setGeometry(QtCore.QRect(560, 230, 101, 31))
        self.pushButton_6.setObjectName("pushButton_6")
        mainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(mainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        mainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(mainWindow)
        self.statusbar.setObjectName("statusbar")
        mainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(mainWindow)
        QtCore.QMetaObject.connectSlotsByName(mainWindow)

    def retranslateUi(self, mainWindow):
        _translate = QtCore.QCoreApplication.translate
        mainWindow.setWindowTitle(_translate("mainWindow", "MainWindow"))
        self.pushButton.setText(_translate("mainWindow", "+"))
        self.pushButton_2.setText(_translate("mainWindow", "-"))
        self.pushButton_3.setText(_translate("mainWindow", "-"))
        self.pushButton_4.setText(_translate("mainWindow", "+"))
        self.pushButton_5.setText(_translate("mainWindow", "-"))
        self.pushButton_6.setText(_translate("mainWindow", "+"))


class Dialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)

        label1 = QtWidgets.QLabel('Введите ФИО сотрудника:')
        label2 = QtWidgets.QLabel('Выберите отдел:')
        self.QName = QtWidgets.QLineEdit()
        self.QDep = QtWidgets.QComboBox(self)
        self.QDep.addItems(['Otdel1', 'Otdel2', 'Otdel3'])
        self.QPos = QtWidgets.QComboBox(self)
        self.QPos.addItems(['1','2','3'])
        self.btnOk = QtWidgets.QPushButton("Ok") #    , clicked=self.hide)    # +++ self.
        layout = QtWidgets.QGridLayout(self)
        layout.addWidget(label1, 1, 1, 1, 1)
        layout.addWidget(label2, 2, 1, 1, 1)
        layout.addWidget(self.QName, 1, 2, 1, 1)
        layout.addWidget(self.QDep, 1, 2, 3, 3)
        layout.addWidget(self.QPos, 1, 2, 4, 4)
        layout.addWidget(self.btnOk, 3, 2, 1, 1)


class ExampleApp(QtWidgets.QMainWindow, Ui_mainWindow):   # front.
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.item_list = ['item %s' % i for i in range(5)]                  # +
        # QStringListModel - Класс предоставляет модель, которая предоставляет строки для представлений.
        self.model = QStringListModel(self)                                 # +++
        self.model.setStringList(self.item_list)                            # +
        self.list_1.setModel(self.model)                                    # +++

        self.dialog = Dialog()                                    # front.
        self.dialog.btnOk.clicked.connect(self.btnOk_clicked)               # +++

        self.pushButton.pressed.connect(self.add)


    def add(self):
        self.dialog.exec_()    

# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    def btnOk_clicked(self):        
        rows = self.model.rowCount()
        self.model.insertRow(rows)
        self.model.setData(self.model.index(rows, 0), f'QName = {self.dialog.QName.text()}')
        #                                                        ^^^^^^^^^^^^^^^^^^^^^^^^^
        rows = self.model.rowCount()
        self.model.insertRow(rows)
        self.model.setData(self.model.index(rows, 0), f'QPos = {self.dialog.QPos.currentText()}')
        #                                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        self.dialog.hide()
# ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

def main():
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    app.exec_()

if __name__ == '__main__':
    main()

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

→ Ссылка