我目前正在开展一个项目,直到现在我还没想过不测试我的代码。
我已经获得了几个错误,但我在这里只暴露了其中一个,我试图将其减少到最小值。
这是我的代码:
from tkinter import *
root = Tk()
can = Canvas(root, height = 200, width = 300, bg = "white")
can.tab = [{} for k in range(5)]
nb = 0
def del(event):
global can, nb
can.tab[nb-1] = {}
nb -= 1
def click(event):
global can, nb
x,y = (event.x)//50 * 50, (event.y)//50 * 50
can.tab[nb]['image'] = PhotoImage(master = can, file = "mouse_pointer.png", name = "mouse_pointer") #Removing the name definition makes it work
can.create_image(x, y, anchor = NW, image = can.tab[nb]['image'])
nb += 1
can.focus_set()
can.bind("<Button-1>", click)
can.bind("<Delete>", del)
can.pack()
root.mainloop()
此代码的目的是创建一个Canvas,当您单击时,它会创建一个您单击的图像,当您按del时,它会使最后一个图像消失。< / p>
问题如下如果我没有为我的图片命名,它可以正常工作,但是当我给他们一个名字时(他们都有相同的名字!),当我按下时del他们都被删除而不是只删除最后一个。
这对我的项目进展没有多大帮助,但我希望能够理解这里发生的事情。
答案 0 :(得分:0)
有不同的场景可以满足您的需求。
这是一个想法,您可以根据您的确切需要进行调整:
在您的位置,我会依赖delete()
函数来删除创建的图像的ID。它还可用于通过传递&#39; all
&#39;删除画布上的所有现有图像。参数。
要解决您的问题,您可以将您创建的图像的ID(其中五个,我猜)存入堆栈(列表或其他任何内容,具体取决于我所说的,根据您的具体情况,作为示例)这里对我来说很模糊)然后在LIFO后删除它们:
from tkinter import *
root = Tk()
can = Canvas(root, height = 200, width = 300, bg = "white")
can.tab = [{} for k in range(5)]
nb = 0
stack_ids = [] # added this
def bell(event):
can.delete(stack_ids.pop()) #modified your function here
def click(event):
global can, nb
x,y = (event.x)//50 * 50, (event.y)//50 * 50
can.tab[nb]['image'] = PhotoImage(master = can, file = "mouse_pointer.png", name = "mouse_pointer")
id = can.create_image(x, y, anchor = NW, image = can.tab[nb]['image'])
stack_ids.append(id) # save the ids somewhere
can.focus_set()
can.bind("<Button-1>", click)
can.bind("<Delete>", bell)
can.pack()
root.mainloop()