Remove canvas widgets in Tkinter

左心房为你撑大大i 提交于 2019-12-25 16:46:23

问题


from Tkinter import *
import random

root = Tk()
width = 700
height = 600
canvas = Canvas(root, width = width, height = height, bg = "light blue")
canvas.pack()
pipes = []

class NewPipe:
    def __init__(self, pipe_pos, pipe_hole):
        self.pipe_pos = list(pipe_pos)
    def update(self):
        self.pipe_pos[0] -= 3
        self.pipe_pos[2] -= 3
    def draw(self):
        canvas.create_rectangle(self.pipe_pos, fill = "green")
    def get_pos(self):
        return self.pipe_pos

def generate_pipe():
    pipe_hole = random.randrange(0, height)
    pipe_pos = [width - 100, 0, width, pipe_hole]
    pipes.append(NewPipe(pipe_pos, pipe_hole))
    draw_items()
    canvas.after(2000, generate_pipe)

def draw_items():
    for pipe in pipes:
        if pipe.get_pos()[2] <= 0 - 5:
            pipes.remove(pipe)
        else:
            pipe.draw()
            pipe.update()
    canvas.after(100, draw_items)

def jump(press):
    pass

canvas.bind("<Button-1>", jump)
canvas.after(2000, generate_pipe)
draw_items()
mainloop()

Right now I am trying to make a game where you have to dodge rectangles, which are pipes. It is basically Flappy Bird, but on Tkinter. In this code I am trying to generate pipes and move them, but the pipes I have drawn before do not leave and they just stay there. This means that when the pipe moves, the position it was just in doesnt change and that shape stays there. Is there any way to delete past shapes, or another way to move them?


回答1:


canvas.create_rectangle(self.pipe_pos, fill = "green") returns an ID.

You can use this ID to put it into methods like

canvas.coords
canvas.delete
canvas.itemconfigure
canvas.scale
canvas.type
...

Have a look at help(canvas).

The canvas is not a framebuffer on which you paint stuff for one frame. The painted stuff does not go away and you can move it and change all the parameters you can use when creating.



来源:https://stackoverflow.com/questions/23074780/remove-canvas-widgets-in-tkinter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!