如何获取 Canvas 对象的 ID,以便我可以在 tkinter 中将其删除?
How do I get a Canvas object's ID so I can delete it in tkinter?
我正在学习一些 tkinter,只是想感受一下。
在我简单的window中是一个canvas的框架。有一个输入字段。写一些文字,点击按钮,文字就会出现在按钮下方。
canvas 中有 4 个标签。我想获取 label4 的对象 ID,因此我可以每次删除它,然后重新创建 label4。否则,新文本位于 label4 中旧文本之上。
有人告诉我使用:
canvas1.delete("all")
但这会删除所有标签和我的按钮。 (也尝试了 canvas1.delete(label4) 和 canvas1.delete("label4") 但似乎没有用。)
我看到我需要对象的ID来删除它,它只是一个整数,所以我猜label4的ID应该是4。我设置:
canvas1.delete(4)
在函数 getInput() 重新创建它之前第一次删除了 label4。但这只有效 1 次。输入字段中的新条目并单击按钮重新创建 label4,但 ID 不再是 4,因为第二次,label4 的文本保留。
如何获取 canvas 对象的 ID 以便我可以专门删除该对象?
def myWindow1():
window = tkinter.Tk()
window.title("Get a text input and echo it")
window.config(bg='light blue')
window.geometry('640x480')
# make a frame to take the canvas
frame=Frame(window,width=400,height=300, bg='lightblue')
frame.pack(expand=True, fill=BOTH) #.grid(row=0,column=0)
xscrollbar = Scrollbar(frame, orient=HORIZONTAL, width=20, activebackground='red', )
yscrollbar = Scrollbar(frame, orient=VERTICAL, width=20, activebackground='green', )
xscrollbar.pack( side = BOTTOM, fill = X )
yscrollbar.pack( side = RIGHT, fill = Y )
#canvas1 = tkinter.Canvas(window, xscrollcommand = xscrollbar.set, yscrollcommand = yscrollbar.set, bg='white', width = 400, height = 300, relief = 'raised')
#canvas1.pack()
canvas1 = tkinter.Canvas(frame, bg='white', width = 400, height = 300, relief = 'raised')
canvas1.config(xscrollcommand=xscrollbar.set, yscrollcommand=yscrollbar.set)
canvas1.pack(padx=10, pady=10)
label1 = tkinter.Label(frame, text='Echo a text input')
label1.config(font=('helvetica', 14))
canvas1.create_window(200, 25, window=label1)
label2 = tkinter.Label(frame, text='Type your text:')
label2.config(font=('helvetica', 10))
canvas1.create_window(200, 100, window=label2)
entry1 = tkinter.Entry (frame)
canvas1.create_window(200, 140, window=entry1)
def getInput():
canvas1.delete(4)
#label4.destroy
msg = entry1.get()
label3 = tkinter.Label(frame, text= 'You entered this text:',font=('helvetica', 10))
canvas1.create_window(200, 210, window=label3)
# wraplength is in pixels not characters!!
#label4 = tkinter.Label(window, text=msg,font=('helvetica', 10, 'bold'), anchor='w', width=35, wraplength=80)
#label4 = tkinter.Label(frame, text=msg,font=('helvetica', 10, 'bold'), anchor='w', width=55, wraplength=390)
label4 = tkinter.Label(frame, text=msg,font=('helvetica', 10, 'bold'), anchor='w', wraplength=390)
#canvas1.update()
canvas1.create_window(200, 250, window=label4)
# don't set the y value too high or you won't see the output!
#canvas1.create_window(200, 320, window=label4)
global label4
label4 = tkinter.Label(frame, text= 'Your input will be here after you click the button.',font=('helvetica', 10, 'bold'), anchor='w', wraplength=390)
canvas1.create_window(200, 250, window=label4)
button1 = tkinter.Button(text='Get the text message', command=getInput, bg='brown', fg='white', font=('helvetica', 9, 'bold'))
canvas1.create_window(200, 180, window=button1)
window.mainloop()
How do I get a Canvas object's ID so I can delete it in tkinter?
在 canvas 上创建对象时返回标识符:
the_id = canvas1.create_window(...)
...
canvas1.delete(the_id)
我正在学习一些 tkinter,只是想感受一下。
在我简单的window中是一个canvas的框架。有一个输入字段。写一些文字,点击按钮,文字就会出现在按钮下方。
canvas 中有 4 个标签。我想获取 label4 的对象 ID,因此我可以每次删除它,然后重新创建 label4。否则,新文本位于 label4 中旧文本之上。
有人告诉我使用:
canvas1.delete("all")
但这会删除所有标签和我的按钮。 (也尝试了 canvas1.delete(label4) 和 canvas1.delete("label4") 但似乎没有用。)
我看到我需要对象的ID来删除它,它只是一个整数,所以我猜label4的ID应该是4。我设置:
canvas1.delete(4)
在函数 getInput() 重新创建它之前第一次删除了 label4。但这只有效 1 次。输入字段中的新条目并单击按钮重新创建 label4,但 ID 不再是 4,因为第二次,label4 的文本保留。
如何获取 canvas 对象的 ID 以便我可以专门删除该对象?
def myWindow1():
window = tkinter.Tk()
window.title("Get a text input and echo it")
window.config(bg='light blue')
window.geometry('640x480')
# make a frame to take the canvas
frame=Frame(window,width=400,height=300, bg='lightblue')
frame.pack(expand=True, fill=BOTH) #.grid(row=0,column=0)
xscrollbar = Scrollbar(frame, orient=HORIZONTAL, width=20, activebackground='red', )
yscrollbar = Scrollbar(frame, orient=VERTICAL, width=20, activebackground='green', )
xscrollbar.pack( side = BOTTOM, fill = X )
yscrollbar.pack( side = RIGHT, fill = Y )
#canvas1 = tkinter.Canvas(window, xscrollcommand = xscrollbar.set, yscrollcommand = yscrollbar.set, bg='white', width = 400, height = 300, relief = 'raised')
#canvas1.pack()
canvas1 = tkinter.Canvas(frame, bg='white', width = 400, height = 300, relief = 'raised')
canvas1.config(xscrollcommand=xscrollbar.set, yscrollcommand=yscrollbar.set)
canvas1.pack(padx=10, pady=10)
label1 = tkinter.Label(frame, text='Echo a text input')
label1.config(font=('helvetica', 14))
canvas1.create_window(200, 25, window=label1)
label2 = tkinter.Label(frame, text='Type your text:')
label2.config(font=('helvetica', 10))
canvas1.create_window(200, 100, window=label2)
entry1 = tkinter.Entry (frame)
canvas1.create_window(200, 140, window=entry1)
def getInput():
canvas1.delete(4)
#label4.destroy
msg = entry1.get()
label3 = tkinter.Label(frame, text= 'You entered this text:',font=('helvetica', 10))
canvas1.create_window(200, 210, window=label3)
# wraplength is in pixels not characters!!
#label4 = tkinter.Label(window, text=msg,font=('helvetica', 10, 'bold'), anchor='w', width=35, wraplength=80)
#label4 = tkinter.Label(frame, text=msg,font=('helvetica', 10, 'bold'), anchor='w', width=55, wraplength=390)
label4 = tkinter.Label(frame, text=msg,font=('helvetica', 10, 'bold'), anchor='w', wraplength=390)
#canvas1.update()
canvas1.create_window(200, 250, window=label4)
# don't set the y value too high or you won't see the output!
#canvas1.create_window(200, 320, window=label4)
global label4
label4 = tkinter.Label(frame, text= 'Your input will be here after you click the button.',font=('helvetica', 10, 'bold'), anchor='w', wraplength=390)
canvas1.create_window(200, 250, window=label4)
button1 = tkinter.Button(text='Get the text message', command=getInput, bg='brown', fg='white', font=('helvetica', 9, 'bold'))
canvas1.create_window(200, 180, window=button1)
window.mainloop()
How do I get a Canvas object's ID so I can delete it in tkinter?
在 canvas 上创建对象时返回标识符:
the_id = canvas1.create_window(...)
...
canvas1.delete(the_id)