class MainWindow(QtWidgets.QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.square = Square()

        try:
            self.square.download()
            self.download()
        except Exception:
            self.ui.errorlabel.setText("Загрузка неудалась")

        self.ui.resultButton.clicked.connect(self.checkSquare)
        self.ui.creaeteButton.clicked.connect(self.crete_matrix)

    def download(self):
        self.ui.tableWidget.setRowCount(4)
        self.ui.tableWidget.setColumnCount(4)
        for i in range(0, 4): 
            for j in range(0, 4):
                tableSpinBox = QtWidgets.QSpinBox()
                tableSpinBox.setMinimum(0) 
                tableSpinBox.setMaximum(self.square.N ** 2)
                tableSpinBox.setValue(self.square.square[i][j])
                self.ui.tableWidget.setCellWidget(i, j, tableSpinBox)

    def crete_matrix(self):
        N = 4
        self.square = Square(N)
        self.ui.errorlabel.clear()
        self.ui.result.clear()
        self.download()

    def closeEvent(self, event): 
        for i in range(0, self.square.N):
            for j in range(0, self.square.N):
                self.square.square[i][j] = self.ui.tableWidget.cellWidget(i, j).value()
        self.square.save()
        event.accept()

    def checkSquare(self):
        for i in range(0, self.square.N):
            for j in range(0, self.square.N):
                self.square.square[i][j] = self.ui.tableWidget.cellWidget(i, j).value()
        if self.square.isright(): 
            self.ui.result.setText("Правильное поле!")
        else:
            self.ui.result.setText("Неправильное поле")