Невозможно использовать атрибут .delete для холста - PullRequest
0 голосов
/ 12 июня 2019

Хорошо, поэтому я пытаюсь удалить холст, как только требование выполнено, но я получаю эту ошибку: Я хотел бы, чтобы, когда herox достиг значения 700, фон изменился, и я думаю, что смогу сделать это только после удаления старого фона.

line 56, in <module>
    backgroundcanvas.delete(ALL)
AttributeError: 'int' object has no attribute 'delete'
from tkinter import *
from PIL import Image



root = Tk()
root.title("Game")

heroc = None
backgroundcanvas = None

speed = 10

def ChangeMap():
    heropos = canvas.coords(heroc)
    herox = heropos[0]
    heroy = heropos[1]
    if herox == 700:
        print("requirement met")
        backgroundcanvas.delete("all")
        backgroundcanvas.create_image(350, 200, image="background2.png")

def Move_hero(event):
    global heroc
    if event.keysym == "Up":
        canvas.move(heroc, 0, -speed)
    if event.keysym == 'Down':
        canvas.move(heroc, 0, speed)
    if event.keysym == 'Right':
        ChangeMap()
        canvas.move(heroc, speed, 0)
    if event.keysym == 'Left':
        canvas.move(heroc, -speed, 0)
        print(canvas.coords(heroc))


canvas = Canvas(root, bg="black", width=700, height=400)
canvas.pack()

heroc = None
backgroundcanvas = None

background = PhotoImage(file="background.png")
background2 = PhotoImage(file="background2.png")
backgroundcanvas = canvas.create_image(350,200,image=background)


character = PhotoImage(file="hero.png")
heroc = canvas.create_image(30, 260 ,image=character)

canvas.bind_all('<KeyPress-Up>', Move_hero)
canvas.bind_all('<KeyPress-Down>', Move_hero)
canvas.bind_all('<KeyPress-Left>', Move_hero)
canvas.bind_all('<KeyPress-Right>', Move_hero)

root.mainloop()

Если нужны изображения и другие вещи из кода, я добавлю их:)

1 Ответ

0 голосов
/ 12 июня 2019

Ошибка говорит вам точно, что не так: вы пытаетесь вызвать delete("all") для целого числа - это такая же ошибка, как если бы вы сделали 42.delete("all").

Причина в том, что backgroundcanvas - это целое число - идентификатор холста, а у целых чисел нет метода delete.Вместо этого вам нужно вызвать метод delete canvas.Если вы хотите удалить все, вы должны сделать canvas.delete("all"), а если вы хотите удалить только фон, вы сделаете canvas.delete(backgroundcanvas.

То же самое верно для следующей строки, где вы пытаетесь вызвать create_image на backgroundcanvas.Вы должны вызвать это на фактическом виджете холста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...