Как отделить модель и представление.(класс 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 - представление которое нужно сделать:
