2014-12-26 93 views
0

我正在尝试一个程序,它将显示输入框中输入的相应名称的标签。 问题:它重叠并显示标签,而不是消失的前一个条目的标签。 请帮助我消除以前的条目并显示标签。 编码:显示当前标签消失前

import Tkinter as tki 
class App(object): 
    def __init__(self,root): 
     self.root = root 

     self.txt_frm = tki.Frame(self.root, width=900, height=900) 
     self.txt_frm.pack(fill="both", expand=True) 
     button3 = tki.Button(self.txt_frm,text="CLICK 1", command = self.retrieve_inpu) 
     button3.grid(column=0,row=2) 
     self.entry = tki.Entry(self.txt_frm) 
     self.entry.grid(column=1,row=0) 

    def retrieve_inpu(self): 
     entr = self.entry.get() 
     label = tki.Label(self.txt_frm,text=entr) 
     label.grid(column=0,row=3) 

root = tki.Tk() 
app = App(root) 
root.mainloop() 
+0

可能重复[Tkinter的显示当前标签,删除以前(http://stackoverflow.com/questions/27654948/tkinter-display-current-label-删除前一个) –

回答

1

你需要保持对标签的引用,并调用它.destroy()创建新的标签之前摆脱它。

更好的是,如果这是所有需要发生的情况,您可以更改文本。试试下面的代码来代替你自己的:的

import Tkinter as tki 
class App(object): 
    def __init__(self,root): 
     self.root = root 


     self.txt_frm = tki.Frame(self.root, width=900, height=900) 
     self.txt_frm.pack(fill="both", expand=True) 
     button3 = tki.Button(self.txt_frm,text="CLICK 1", command = self.retrieve_inpu) 
     button3.grid(column=0,row=2) 
     self.entry = tki.Entry(self.txt_frm) 
     self.entry.grid(column=1,row=0) 

     self.label = tki.Label(self.txt_frm) 
     self.label.grid(column=0,row=3) 

    def retrieve_inpu(self): 
     entr = self.entry.get() 
     self.label.config(text=entr) 

root = tki.Tk() 
app = App(root) 
root.mainloop() 
+0

调用'grid_forget'不会“摆脱它”,它只会隐藏它从视图。如果您只是简单地调用'grid_forget'然后“重新创建”这个小部件,那么您将创建第二个,然后是第三个,然后是第四个...小部件。另外,你的答案令人费解,因为你说代码需要调用'grid_forget',但你的代码实际上并没有这样做。 –

+0

当你将他们击倒Bryan Oakley时,你是否真的看过我的答案?我很欣赏grid_forget不会摆脱那个小部件,我忘了删除那个部分,但是我的回答很清楚地说'如果这是所有需要发生的事情,你可以改变文本',这就是代码提供的功能。 –

+0

如果您认为我不公平,我很抱歉。我已经看到几个初学者在思考grid_forget销毁小部件时犯了同样的错误。我会解决你的答案,以更准确一点。 –