Как остановить движение на холсте с помощью tkinter - PullRequest
0 голосов
/ 29 апреля 2019

Я делаю простую математическую игру, используя tkinter, и у меня возникают некоторые проблемы, когда все элементы на экране перемещаются вверх.

Итак, у меня есть некоторый код, который создает экран A с холстом.Изображение на заднем плане и некоторые кнопки и текст.При нажатии кнопки экран изменяется, при нажатии другой кнопки он возвращается к экрану А, очищая холст и перерисовывая каждый элемент обратно.Я пытался изменить привязку, но это, кажется, не имеет значения.

Холст выглядит так после нажатия кнопки возврата

The canvas looks like this after the return button is pressed

При первом посещении экрана он выглядит так, как должен.

Спасибо :) Любая помощь будет высоко ценится

def showendscreen(self,returned):
    self.clearcanvas()

    if returned==False:
        self.newhighscore=checkifhighscore(self.mode)
        self.pictures=Pictures()
        if self.newhighscore == True:
            self.endtext="          congratulations \n you've got a new highscore!!"
            self.photo=self.pictures.congrats
        elif self.newhighscore==False:
            self.endtext = "Unlucky, keep practicing!"
        elif self.newhighscore == "same":
            self.photo=self.pictures.happy
            self.endtext="well done, you got your personal best again!"

    self.image1=Image.open(self.photo)
    (self.w,self.h)=self.image1.size
    self.image1a=ImageTk.PhotoImage(self.image1)
    self.item1=self.canvas.create_image(self.w/2,self.h/2, image=self.image1a, anchor="center")
    self.canvas.create_text(self.w/2,50,fill="purple",font="Purisa 40 bold",anchor='center',text=self.endtext)
    self.canvas.create_text(self.w/2,600,fill="purple",font="Purisa 40 bold",anchor='n',text="You scored: "+ str(self.countq))
    self.canvas.grid()
    self.image1.close()
    self.btn3=tk.Button(root, width=18, height =1,text="Questions Answered", font = "Purisa 20",command=self.questionsanswered)
    self.btn3_window = self.canvas.create_window(((self.w/2)-150),(self.h/2)+3 ,anchor="center", window=self.btn3)    
    self.btn4=tk.Button(root, width=18, height =1,text="Scoreboard",font = "Purisa 20",command=self.scoreboard)
    self.btn4_window = self.canvas.create_window(((self.w/2)+150),(self.h/2)+3 ,anchor="center", window=self.btn4)
    self.btn5=tk.Button(root, width=18, height =1,text="My Progress",font = "Purisa 20", command = self.progress)
    self.btn5_window = self.canvas.create_window(((self.w/2)),(self.h/2)+60 ,anchor="center", window=self.btn5)
    self.btn6=tk.Button(root, width=10, height=1, text="Restart", font ="Purisa 15", command = restartgame)
    self.btn6_window=self.canvas.create_window(((self.w/2)),(self.h/2)+120 ,anchor="center", window=self.btn6)
    self.canvas.grid()
def clearcanvas(self): self.canvas.delete('all')

Кнопка, которая запускается выше функции:

self.backbutton=tk.Button(root,image=self.returnb, command= lambda: self.showendscreen(True), anchor="nw") 
self.backbutton_window = self.canvas.create_window(10,60,anchor="nw", window=self.backbutton)
...