Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取画布对象';s ID以便我可以在tkinter中删除它?_Tkinter_Tkinter Canvas - Fatal编程技术网

如何获取画布对象';s ID以便我可以在tkinter中删除它?

如何获取画布对象';s ID以便我可以在tkinter中删除它?,tkinter,tkinter-canvas,Tkinter,Tkinter Canvas,我只是在学习一些技巧,只是想感受一下 在我的简单窗口中,是一个框架中的画布。有一个输入字段。写一些文字,单击按钮,文字将显示在按钮下方 画布中有4个标签。我想获得label4的对象ID,这样每次都可以删除它,然后重新创建label4。否则,新文本将位于label4中旧文本的顶部 有人告诉我使用: 画布1.删除(“全部”) 但这会删除所有标签和我的按钮。(还尝试了canvas1.delete(label4)和canvas1.delete(label4),但似乎不起作用。) 我读到我需要对象的ID来

我只是在学习一些技巧,只是想感受一下

在我的简单窗口中,是一个框架中的画布。有一个输入字段。写一些文字,单击按钮,文字将显示在按钮下方

画布中有4个标签。我想获得label4的对象ID,这样每次都可以删除它,然后重新创建label4。否则,新文本将位于label4中旧文本的顶部

有人告诉我使用:

画布1.删除(“全部”)

但这会删除所有标签和我的按钮。(还尝试了canvas1.delete(label4)和canvas1.delete(label4),但似乎不起作用。)

我读到我需要对象的ID来删除它,它只是一个整数,所以我猜label4的ID应该是4。我设定:

游说1.删除(4)

在函数getInput()重新创建label4之前,它第一次摆脱了label4。但这只适用于1次。输入字段中的新条目和单击按钮将重新创建label4,但ID不再是4,因为第二次时,label4的文本将保持不变

如何获取画布对象的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()
如何获取画布对象的ID以便在tkinter中删除它

在画布上创建对象时返回标识符:

the_id = canvas1.create_window(...)
...
canvas1.delete(the_id)

谢谢,我在这里的一个旧线程中看到了这一点,但我不理解它!修补tkinter并不容易!有没有办法在事后获得身份证?我试过了,但没法成功!不知道我做错了什么。canvas1.delete('u id')或canvas1.delete('u id')或canvas1.delete('u id')正当原因和错误:Tkinter回调回溯异常(最近一次调用):文件“/usr/lib/python3.6/Tkinter/'u init_uuuuuuuuuuuuuuuuuupy”,第1705行,调用返回self.func(*args)文件“,第34行,getInput文件“/usr/lib/python3.6/Tkinter/'u init_uuuuuupy”,第2514行,在delete self.tk.call((self._w,'delete')+args)_tkinter.TclError:标记搜索中的布尔运算符无效expression@Pedroski:需要是
canvas1.删除(id)
。我已经更新了我的答案。谢谢!对不起打扰你了!问题是我把东西放错地方了!我现在让它工作了。另外,从其他线程中,我发现我可以放置:canvas1.create_window(…,tags=“mylabel”),然后执行:canvas1.delete(“mylabel”),总有一天我会掌握这个窍门的!谢谢!