在棋类游戏中,有时需要删除Canvas画布上部分对象。例如,玩围棋要在棋盘上放置若干棋子。重玩游戏要删除所有棋子,保留画布。又如,在黑白棋游戏中,玩家和计算机作为对手。可为玩家增加提示功能,要在棋盘上增加标志,指出玩家当前允许放置棋子的所有位置。每当计算机重新放置了棋子,必须为玩家更新提示标志,即删除旧的标志,放置新标志。可通过记录每个对象的ID值,用delete(ID)删除1个对象,一般要用一个循环语句来删除所有对象。比较简单的方法是,将所有被删除的对象的属性tag设置为同一字符串,例如tag=“a1”,用一条语句delete(“a1”)删除所有这些tag属性相同的对象。下边的程序介绍了Python tkinter的Canvas函数delete参数可取3中不同值,删除不同Canvas中的对象方法。
import tkinter as tk
root = tk.Tk() #初始化窗口
root.title('Canvas函数delete三种用法') #窗口标题
#窗口宽300,高=300,窗口左上点离屏幕左边界200,离屏幕上边界距离20。
root.geometry("400x300+200+20")
#设置窗口是否可变,这里宽不可变,高不可变,默认为True
root.resizable(width=False,height=False)
w = tk.Canvas(root, width = 615, height = 615, background = "white")
w.pack()
qzs={} #字典
def add(): #在Canvas对象w上增加2个园、1个矩形和文本。tag不能是“1”,纯数字可能出错
qzs[0]=w.create_rectangle(20, 50, 150, 150, fill='red',tag="r1")
qzs[1]=w.create_text(250, 100, text = "Python",fill='red',font=("Arial",20))
qzs[2]=w.create_oval(200, 180, 300, 280, fill = "pink",tag="c1")
qzs[3]=w.create_oval(20, 180, 120, 280, fill = "blue",tag="c1")
def dele2(): #事件函数,删除tag="c1"的两个圆,tag="r1"矩形不被删除,字符不被删除
w.delete("c1")
def deleAll(): #事件函数,删除所有对象
w.delete("all")
def dele1(): #事件函数,删除指定ID的对象字符串
w.delete(qzs[1])
button1=tk.Button(w,text='画圆和矩形',command=add)
button1.place(x=10,y=10,width=80,height=30)
button1=tk.Button(w,text='删2个圆',command=dele2)
button1.place(x=100,y=10,width=80,height=30)
button1=tk.Button(w,text='删所有对象',command=deleAll)
button1.place(x=200,y=10,width=80,height=30)
button1=tk.Button(w,text='删所指定矩形',command=dele1)
button1.place(x=300,y=10,width=80,height=30)
root.mainloop()