2010-02-14 17 views
15

उपयोगकर्ता Entry विजेट को साफ़ करने का प्रयास कर रहा है जब उपयोगकर्ता Tkinter का उपयोग कर एक बटन दबाता है।टिंकर में बटन दबाए जाने के बाद एंट्री विजेट को कैसे साफ़ किया जाए?

मैंने ent.delete(0, END) का उपयोग करने का प्रयास किया, लेकिन मुझे यह त्रुटि मिली कि स्ट्रिंग्स में हटा नहीं है।

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() 

उत्तर

26

Introduction to Tkinter के माध्यम से थोड़ा के आसपास poking के बाद, मैं जब "Clear text" बटन धकेल दिया जाता है नीचे दिए गए कोड है, जो एक पाठ क्षेत्र प्रदर्शित अलावा कुछ भी नहीं करता है और यह स्पष्ट के साथ आया था:

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

आप डेटा की लंबाई की गणना करने के बजाय तर्क END (या "end") की आपूर्ति कर सकते हैं। चूंकि आप कहते हैं कि यह काम नहीं करता है लेकिन "काम नहीं किया" परिभाषित नहीं करता है (यानी: क्या आपको कोई त्रुटि मिली, या यह चुपचाप विफल हो गई?), मेरा अनुमान है कि आपने एक अयोग्य "अंत" का उपयोग किया है। इसके बजाय "Tkinter.END" आज़माएं। जब मैं उपर्युक्त कोड में इसका उपयोग करता हूं तो यह ठीक काम करता है। –

+0

@ ब्रायन: आह, मैंने अभी ईएनडी का इस्तेमाल किया, टिंकर नहीं।अंत (ट्यूटोरियल सिर्फ आयात के बजाय 'आयात ... से' का उपयोग किया जाता है)। धन्यवाद! फिक्स कोड में है। – GreenMatt

+0

मैं बटन को एक ही समय में 2 क्रियाएं करने के लिए चाहता हूं। पहला एक यादृच्छिक कार्रवाई करना है और दूसरा प्रवेश – Dan

2

मैं अपने प्रश्न के बारे में स्पष्ट नहीं कर रहा हूँ:

यहाँ मेरी कोड है, जहां मैं real.delete(0, END) पर त्रुटि मिल रही है। http://effbot.org/tkinterbook/entry.htm#patterns से, यह लगता है कि आपको हटाए जाने के बाद बस एक असाइनमेंट करने की आवश्यकता है। विजेट में प्रवेश टेक्स्ट जोड़ने के लिए, सम्मिलित विधि का उपयोग करें। वर्तमान पाठ को प्रतिस्थापित करने के लिए, आप नया टेक्स्ट डालने से पहले हटाएं कॉल कर सकते हैं।

e = Entry(master) 
e.pack() 

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

क्या आप थोड़ा और कोड पोस्ट कर सकते हैं?

+0

जवाब "ऐसा लगता है तुम सिर्फ तुम्हारे जाने के बाद कहा जाता हटाना एक काम करने की ज़रूरत है" कोई रास्ता नहीं में सवाल "कैसे प्रवेश विजेट स्पष्ट करने के लिए" का जवाब देता का समाधान होगा। –

+0

इससे मुझे बहुत मदद मिली: e.delete (0, END), चार्ल्स धन्यवाद। –

4

real मान ent.get() मिलता है जो केवल एक स्ट्रिंग है। यह पता नहीं है कि यह कहां से आया, और विजेट को प्रभावित करने का कोई तरीका नहीं है।

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 प्रविष्टि विजेट के लिए एक उचित संदर्भ है:

real.delete() के बजाय

, प्रविष्टि विजेट पर ही .delete() कहते हैं। अगर आपको वह त्रुटि मिलती है जो आप कहते हैं, तो आपको अपने कोड में एक त्रुटि है। यदि आप स्वयं त्रुटि को पहचानने में असमर्थ हैं तो आपको हमें कोड दिखाना होगा।

इस के साथ
-6

प्रयास करें:

सभी की
import os 
os.system('clear') 
+1

को साफ़ करना है, कृपया –

+3

कोड को समझने के लिए न्यूनतम ifo जोड़ने पर विचार करें, यह बिल्कुल काम नहीं करेगा। यह स्क्रीन को साफ़ करता है, खिड़की में विजेट नहीं। –

+0

इस प्रश्न के साथ इसका कोई लेना-देना नहीं है। – cpburnz

0

सबसे पहले, सुनिश्चित पाठ सक्षम किया गया है, तो अपने टैग हटाना सामग्री बनाने के लिए, और उसके बाद।

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

जब टेक्स्ट "अक्षम" होता है, तो डिलीट काम नहीं करता है क्योंकि टेक्स्ट फ़ील्ड केवल-पढ़ने योग्य मोड में है।

0

आप 'END' का उपयोग करने के बजाय ent.delete(0,"end") के साथ आगे बढ़ेंगे, उद्धरण के अंदर 'अंत' का उपयोग करें।

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() 

यह आपकी समस्या

संबंधित मुद्दे