2014-12-26 89 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銷燬小部件時犯了同樣的錯誤。我會解決你的答案,以更準確一點。 –