Как отделить модель и представление.(класс App не должен нести функции поддержки GUI) как это сделать?

Как отделить модель и представление.(класс App не должен нести функции поддержки GUI) как это сделать?

код дизайна:

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

# Form implementation generated from reading ui file 'C:/Desktop/un.ui'
#
# Created by: PyQt5 UI code generator 5.14.2
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(299, 181)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(10, 10, 191, 41))
        self.textEdit.setObjectName("textEdit")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(10, 60, 191, 31))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(210, 10, 81, 41))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(70, 130, 81, 23))
        self.pushButton_3.setObjectName("pushButton_3")
        self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
        self.progressBar.setGeometry(QtCore.QRect(70, 100, 101, 23))
        self.progressBar.setProperty("value", 0)
        self.progressBar.setObjectName("progressBar")
        MainWindow.setCentralWidget(self.centralwidget)
        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", "Добавить числа от 0 до 9"))
        self.pushButton_2.setText(_translate("MainWindow", "Открыть \n"
" файл"))
        self.pushButton_3.setText(_translate("MainWindow", "Сохранить"))

код приложения:

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QFileDialog
import design
import sys
import os

class App(QtWidgets.QMainWindow, design.Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)


        self.pushButton.clicked.connect(self.add_number)
        self.pushButton_2.clicked.connect(self.select_a_file)
        self.pushButton_3.clicked.connect(self.save)

    def select_a_file(self):

        self.input_file, _ = QFileDialog.getOpenFileName(self, 'Выбор файла', '')
        self.textEdit.setText(self.input_file)

    def add_number(self):

        self.c = 0
        number = 10
        pace = 100 / number
        with open(self.input_file) as f:
            self.text = f.read()
            for i in range(number):
                self.text += str(i)
                self.c += pace
                self.progressBar.setValue(round(self.c))

    def save(self):
        with open(self.input_file, 'w') as f_2:
            f_2.write(self.text)


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


if __name__ == '__main__':
    main()

Изначально был код с классом App и методом add_number

class App:

    def add_number(input_file):

        number = 10
        with open(input_file) as f:
            text = f.read()
            for i in range(number):
                text += str(i)

        with open(input_file, 'w') as f_2:
            f_2.write(text)

App.add_number('ok.txt')

GUI - представление которое нужно сделать:

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


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