2010-02-14 18 views
15

Kullanıcı Tkinter kullanarak bir düğmeye bastıktan sonra Entry widget'ı temizlemeye çalışıyorum.Teytere'de bir düğmeye basıldıktan sonra Giriş widget'ı nasıl temizlenir?

ent.delete(0, END) kullanmayı denedim, ancak silme özniteliğine sahip olmadığını söyleyen bir hatayla karşılaştım.

secret = randrange(1,100) 
print(secret) 
def res(real, secret): 
    if secret==eval(real): 
     showinfo(message='that is right!') 
    real.delete(0, END) 

def guess(): 
    ge = Tk() 
    ge.title('guessing game') 

    Label(ge, text="what is your guess:").pack(side=TOP) 

    ent = Entry(ge) 
    ent.pack(side=TOP) 

    btn=Button(ge, text="Enter", command=lambda: res(ent.get(),secret)) 
    btn.pack(side=LEFT) 

    ge.mainloop() 

cevap

26

Introduction to Tkinter içinden biraz kurcalama sonra, bir metin alanı görüntülemek dışında bir şey yapmak ve bunu silmez aşağıdaki kodu, ile geldi:

import tkinter as tk 

class App(tk.Frame): 
    def __init__(self, master): 
     tk.Frame.__init__(self, master, height=42, width=42) 
     self.entry = tk.Entry(self) 
     self.entry.focus() 
     self.entry.pack() 
     self.clear_button = tk.Button(self, text="Clear text", command=self.clear_text) 
     self.clear_button.pack() 

    def clear_text(self): 
     self.entry.delete(0, 'end') 

def main(): 
    root = tk.Tk() 
    App(root).pack(expand=True, fill='both') 
    root.mainloop() 

if __name__ == "__main__": 
    main() 
+1

Verilerin uzunluğunu hesaplamak yerine argümanını END (veya "son") sağlayabilirsiniz. Çalıştığını söylemediğinden, "işe yaramadı" (yani: bir hata aldın mı, yoksa sessizce başarısız mı?) Tanımlamıyorsun, tahminimce şartsız bir "END" kullandın. Bunun yerine "Tkinter.END" yi deneyin. Bunu yukarıdaki kodda kullandığımda, gayet iyi çalışıyor. –

+0

@Bryan: Ah, yeni kullandım, Tkinter değil.END (öğretici, yalnızca içe aktarma yerine 'import' öğesinden kullanılır). Teşekkürler! Düzeltme kodda. – GreenMatt

+0

Düğmenin aynı anda 2 eylem gerçekleştirmesini istiyorum. Birincisi rastgele bir eylem yapmak ve 2. – Dan

2

Ben senin soru hakkında anlamış değilim: Burada

Ben real.delete(0, END) hatayı alıyorum benim kodudur. http://effbot.org/tkinterbook/entry.htm#patterns'dan, , silme işlemini yaptıktan sonra bir ödev yapmanız yeterlidir. Widget'a giriş metni eklemek için insert yöntemini kullanın. Mevcut metni değiştirmek için, yeni metni yerleştirmeden önce silebilirsiniz.

e = Entry(master) 
e.pack() 

e.delete(0, END) 
e.insert(0, "") 

Biraz daha kod gönderebilir misiniz? "Clear text" düğmesine basıldığında

+0

cevap çözmek zorundadır. –

+0

Bu bana çok yardımcı oldu: e.delete (0, END), teşekkürler Charles. –

4

real Sadece bir dize olan ent.get() değerini alır. Nereden geldiğini ve widget'ı etkilemenin hiçbir yolu yoktur.

def res(ent, real, secret): 
    if secret == eval(real): 
     showinfo(message='that is right!') 
    ent.delete(0, END) 

def guess(): 
    ... 
    btn = Button(ge, text="Enter", command=lambda: res(ent, ent.get(), secret)) 
5

ent.delete(0, END)ent girişi aracının için uygun bir referans olduğunu varsayarak Doğru cevap: Yerine real.delete() ait

, girişi aracının kendisinde .delete() arayın. Hata yaparsanız, yaptığınızı söylerseniz kodunuzda bir hata var demektir. Hatayı kendiniz tespit edemiyorsanız, kodu bize göstermeniz gerekir. Bununla

-6

Dene: Herşeyden

import os 
os.system('clear') 
+1

girişi temizlemek için lütfen –

+3

Hayır kodu anlamak için minimum ifo eklemeyi düşünün, bu kesinlikle işe yaramaz. Bu ekranı temizler, pencerede bir widget değil. –

+0

Bunun bu soruyla ilgisi yok. – cpburnz

0

Birincisi, daha sonra içeriği ardından etiketleri silmek, Metin etkin olduğundan emin olun ve. Metin alanı salt okunur modda olduğundan

myText.config(state=NORMAL) 
myText.tag_delete ("myTags") 
myText.delete(1.0, END) 

Metin "DISABLE" dir

, silme çalışmaz.

0

'END' yerine ent.delete(0,"end") ile devam edersiniz, tırnak içinde 'son' kullanın.

secret = randrange(1,100) 
print(secret) 
def res(real, secret): 
    if secret==eval(real): 
     showinfo(message='that is right!') 
    real.delete(0, END) 

def guess(): 
    ge = Tk() 
    ge.title('guessing game') 

    Label(ge, text="what is your guess:").pack(side=TOP) 

    ent = Entry(ge) 
    ent.pack(side=TOP) 

    btn=Button(ge, text="Enter", command=lambda: res(ent.get(),secret)) 
    btn.pack(side=LEFT) 

    ge.mainloop() 

Bu senin sorunun hiçbir şekilde soru "nasıl giriş widget'ı temizlemek için" yanıtlar "Eğer sadece sil adlı bir ödevi yapmak gerekir gibi görünüyor"

İlgili konular