Kivy: динамически менять ярлыки - PullRequest
0 голосов
/ 14 апреля 2020

Я пишу решатель судоку в python, используя kivy. У меня есть решающая математика, и мои методы могут измениться с нерешенной решетки судоку на решенную и затем отобразить ее. Сейчас я пытаюсь удалить и перестроить виджеты после каждого шага решения, поэтому похоже, что компьютер заполняет их один за другим. Когда я пытаюсь это сделать, открывается окно. Когда я нажимаю кнопку, чтобы вызвать метод решения, приложение вылетает. Нет сообщений об ошибках.

Спасибо, что поделились своими идеями.

Это метод решения

def solve(self, *args):

        for x in range(9):
            for y in range(9):
                if self.grid[y][x] == 0:
                    for n in range(1,10):
                        if self.possible(y,x,n):
                            self.grid[y][x] = n
                            self.solve()
                            self.grid[y][x] = 0

                    return

        print(np.matrix(self.grid))
        self.load_grid(self.grid)

Я попытался добавить self.load_grid(self.grid) после self.grid[x][y] = n.

И это метод load_grid

def load_grid(self,grid):
        self.clear_widgets()
        self.box1 = GridLayout(cols=3,rows=3,padding=[3,3,3,3],spacing=[1,1])
        self.box2 = GridLayout(cols=3,rows=3,padding=[3,3,3,3],spacing=[1,1])
        self.box3 = GridLayout(cols=3,rows=3,padding=[3,3,3,3],spacing=[1,1])

        self.box4 = GridLayout(cols=3,rows=3,padding=[3,3,3,3],spacing=[1,1])
        self.box5 = GridLayout(cols=3,rows=3,padding=[3,3,3,3],spacing=[1,1])
        self.box6 = GridLayout(cols=3,rows=3,padding=[3,3,3,3],spacing=[1,1])

        self.box7 = GridLayout(cols=3,rows=3,padding=[3,3,3,3],spacing=[1,1])
        self.box8 = GridLayout(cols=3,rows=3,padding=[3,3,3,3],spacing=[1,1])
        self.box9 = GridLayout(cols=3,rows=3,padding=[3,3,3,3],spacing=[1,1])

        self.add_widget(self.box1)
        self.add_widget(self.box2)
        self.add_widget(self.box3)
        self.add_widget(self.box4)
        self.add_widget(self.box5)
        self.add_widget(self.box6)
        self.add_widget(self.box7)
        self.add_widget(self.box8)
        self.add_widget(self.box9)


        for y in range(0,3):
            for x in range(0,3):
                if grid[y][x] == 0:
                    self.box1.add_widget(In(text="0"))
                else:
                    self.box1.add_widget(Num(text=str(grid[y][x]),bold=True, font_size=30, color=[0,0,0,1]))

        for y in range(0,3):
            for x in range(3,6):
                if grid[y][x] == 0:
                    self.box2.add_widget(In(text="0"))
                else:
                    self.box2.add_widget(Num(text=str(grid[y][x]),bold=True, font_size=30, color=[0,0,0,1]))

        for y in range(0,3):
            for x in range(6,9):
                if grid[y][x] == 0:
                    self.box3.add_widget(In(text="0"))
                else:
                    self.box3.add_widget(Num(text=str(grid[y][x]),bold=True, font_size=30, color=[0,0,0,1]))

        for y in range(3,6):
            for x in range(0,3):
                if grid[y][x] == 0:
                    self.box4.add_widget(In(text="0"))
                else:
                    self.box4.add_widget(Num(text=str(grid[y][x]),bold=True, font_size=30, color=[0,0,0,1]))

        for y in range(3,6):
            for x in range(3,6):
                if grid[y][x] == 0:
                    self.box5.add_widget(In(text="0"))
                else:
                    self.box5.add_widget(Num(text=str(grid[y][x]),bold=True, font_size=30, color=[0,0,0,1]))

        for y in range(3,6):
            for x in range(6,9):
                if grid[y][x] == 0:
                    self.box6.add_widget(In(text="0"))
                else:
                    self.box6.add_widget(Num(text=str(grid[y][x]),bold=True, font_size=30, color=[0,0,0,1]))

        for y in range(6,9):
            for x in range(0,3):
                if grid[y][x] == 0:
                    self.box7.add_widget(In(text="0"))
                else:
                    self.box7.add_widget(Num(text=str(grid[y][x]),bold=True, font_size=30, color=[0,0,0,1]))

        for y in range(6,9):
            for x in range(3,6):
                if grid[y][x] == 0:
                    self.box8.add_widget(In(text="0"))
                else:
                    self.box8.add_widget(Num(text=str(grid[y][x]),bold=True, font_size=30, color=[0,0,0,1]))

        for y in range(6,9):
            for x in range(6,9):
                if grid[y][x] == 0:
                    self.box9.add_widget(In(text="0"))
                else:
                    self.box9.add_widget(Num(text=str(grid[y][x]),bold=True, font_size=30, color=[0,0,0,1]))

        self.add_widget(Button(text="Solve",on_press=self.solve))

...