холст не обновляется - PullRequest
       10

холст не обновляется

0 голосов
/ 27 января 2019

Я пытаюсь сделать алгоритм, который играет в шахматы.Он составляет список всех возможных ходов на определенную глубину.Я пытаюсь нарисовать возможные сценарии после каждого хода один за другим, чтобы проверить это.Я использую рекурсивную функцию cr_list, чтобы вычислять ходы в глубину.После выбора хода я изменяю соответствующие позиции задействованных фигур и вызываю функцию рисования, чтобы увидеть разницу. Но холст не обновляется.То, как я использую метод after, кажется неправильным.Я также попытался использовать метод self.canvas.update_idletasks (), но он работает только один раз, а затем перестает меняться снова.После того, как я использую ctrl + c, чтобы остановить программу, она обновляется, и я также печатаю позиции всех частей в функции рисования, и они являются такими, какими они должны быть. Я использую оператор x = input (), чтобы остановить программу, чтобы увидетьизменения.

def draw(self,piece):

    if self.flag:
        self.canvas.delete('all')
    self.flag=1
    x=(800-(int(self.n)*int((660/int(self.n)))))/2
    y=(800-(int(self.n)*int((660/int(self.n)))))/2
    for i in range(int(self.n)):
        if i%2==0:
            for j in range(int(self.n)):
                if j%2==0:
                    self.canvas.create_rectangle(x,y,x+int((660/int(self.n))),y+int((660/int(self.n))), fill='navajo white')

                else:
                  self.canvas.create_rectangle(x,y,x+int((660/int(self.n))),y+int((660/int(self.n))), fill='saddle brown')

                x+=int((660/int(self.n)))
        else:
            for j in range(int(self.n)):
                if j%2==0:
                        self.canvas.create_rectangle(x,y,x+int((660/int(self.n))),y+int((660/int(self.n))), fill='saddle brown')
                else:
                        self.canvas.create_rectangle(x,y,x+int((660/int(self.n))),y+int((660/int(self.n))), fill='navajo white')

                x+=int((660/int(self.n)))
        y+=int((660/int(self.n)))
        x=(800-(int(self.n)*int((660/int(self.n)))))/2
    x=(800-(int(self.n)*int((660/int(self.n)))))/2
    y=(800-(int(self.n)*int((660/int(self.n)))))/2
    for i in range(16):
        if piece[i]!=None:
            if (piece[i].pos[0]+piece[i].pos[1])%2==0:
                word=piece[i].species+'_aa.ppm'
            else:
                word=piece[i].species+'_am.ppm'
            self.img[i]=tkinter.PhotoImage(file=word)
               self.canvas.create_image(x+piece[i].pos[1]*int((660/int(self.n)))+(int((660/int(self.n)))-73)/2,y+piece[i].pos[0]*int((660/int(self.n)))+(int((660/int(self.n)))-73)/2, anchor=tkinter.NW,image=self.img[i])

        print(piece[i].pos)
    for i in range(16):
        if piece[i]!=None:
            if (piece[i+16].pos[0]+piece[i+16].pos[1])%2==0:
                word=piece[i+16].species+'_ma.ppm'
            else:
                word=piece[i+16].species+'_mm.ppm'
            self.img[i+16]=tkinter.PhotoImage(file=word)
               self.canvas.create_image(x+piece[i+16].pos[1]*int((660/int(self.n)))+(int((660/int(self.n)))-73)/2,y+piece[i+16].pos[0]*int((660/int(self.n)))+(int((660/int(self.n)))-73)/2, anchor=tkinter.NW,image=self.img[i+16])


def cr_list(self,i,lm,met,pieces):
    # .....
    root.after(1000,self.draw(pieces2))
    self.cr_list(i2,lm,met,pieces2)
    # .....
    x=input()
    # .....

1 Ответ

0 голосов
/ 28 января 2019

В конце я обычно вызывал draw (), а ниже я использовал self.canvas.update (), и это сработало.

def cr_list(self,i,lm,met,pieces):
    # .....
    self.draw(pieces2)
    self.canvas.update()
    x=input()
    self.cr_list(i2,lm,met,pieces2)
    # .....
...