2011-03-16 5 views
9

मैं कुछ चैट कार्यक्रम के लिए एक जीयूआई पर काम कर रहा हूं। उपयोगकर्ता के इनपुट के लिए मेरे पास टेक्स्ट() विजेट है, संदेश "रिटर्न" के माध्यम से भेजे जाते हैं और उसके बाद मैं टेक्स्ट() को साफ़ करता हूं। लेकिन जितना कठिन मैंने कोशिश की, मैं अंतिम "\ n" को हटा नहीं सकता जो रिटर्न बटन बनाता है।tkinter टेक्स्ट विजेट से सबकुछ कैसे मिटाएं?

यहाँ इस हिस्से के लिए अपने कोड है:

msg = msg[:-2] 

आप सभी को दूर कर सकते हैं:

def Send(Event): 
    MSG_to_send=Tex2.get("1.0",END) 
    client.send(MSG_to_send) 
    Tex2.delete("1.0",END) 

प्रस्तावों के लिए इंतजार कर रहे)

उत्तर

7

सबसे अधिक संभावना है कि आपकी समस्या यह है कि से पहले नई लाइन डाली गई है। आप सबकुछ हटाते हैं, लेकिन फिर नई लाइन डाली जाती है। यह पाठ विजेट कैसे काम करता है की प्रकृति के कारण है - विजेट बाइंडिंग क्लास बाइंडिंग से पहले होती है, और क्लास बाइंडिंग्स होती हैं जहां उपयोगकर्ता इनपुट वास्तव में विजेट में डाला जाता है।

समाधान (उदाहरण के लिए, <KeyRelease> के लिए बाध्य या bindtags का समायोजन करके) के बाद वर्ग बाइंडिंग होने की अपनी बाइंडिंग को समायोजित करने की संभावना है। यह देखते हुए कि आप बाध्यकारी कैसे कर रहे हैं, हालांकि, यह सुनिश्चित करना मेरे लिए असंभव है कि यह आपकी समस्या है।

एक और समस्या यह है कि जब आप पाठ प्राप्त करते हैं (Tex2.get("1.0",END) के साथ), तो संभवतः आप अपेक्षा से अधिक टेक्स्ट प्राप्त कर रहे हैं। टिंकर टेक्स्ट विजेट गारंटी देता है कि विजेट में अंतिम चरित्र के बाद हमेशा एक नई लाइन होती है। इस नई लाइन के बिना उपयोगकर्ता ने जो कुछ भी दर्ज किया है, उसे पाने के लिए, Tex2.get("1.0","end-1c") का उपयोग करें। वैकल्पिक रूप से, आप क्लाइंट को भेजने से पहले टेक्स्ट विजेट में मौजूद सभी पिछली सफेद जगहों को पट्टी करना चाहते हैं।

+0

ईवेंट के बारे में आपकी सलाह उतनी ही महत्वपूर्ण थी जितनी कि भ्रमित करने के बारे में सलाह थी। अब सब कुछ ठीक काम करता है, बहुत बहुत धन्यवाद। – Andrey

0

एक स्ट्रिंग के साथ आप के साथ पिछले चरित्र को हटा सकते हैं स्ट्रिंग के अंत से व्हाइटस्पेस (न्यूलाइन समेत):

msg = msg.rstrip() 

ठीक है। The Tkinter Text Widget

जहां यह समझाया गया है:: अपनी टिप्पणी पढ़ने के बाद, मैं तो आप इस पेज की जाँच करनी चाहिए लगता है।

"आप डालने या एक निशान से पहले पाठ को हटाते हैं, निशान अन्य पाठ के साथ करने के लिए ले जाया जाता है एक निशान हटाएं, आपको* mark_unset *विधि का उपयोग करना होगा। चिह्न के चारों ओर पाठ को हटाने से चिह्न को स्वयं नहीं हटाया जाता है। "

---- संपादित ----

मेरे गलती, उपरोक्त अनुच्छेद ध्यान न दें। मार्क के पास न्यूलाइन के साथ कुछ लेना देना नहीं है। जैसा कि ब्रायन ने अपने उत्तर में बताया: टिंकर टेक्स्ट विजेट गारंटी देता है कि विजेट में अंतिम चरित्र के बाद हमेशा एक नई रेखा होती है।

+0

हाँ, लेकिन समस्या उस संदेश से जुड़ी नहीं थी जिसे मैं क्लाइंट को भेजता हूं; Tex2.delete() के बाद मुझे "2.0" में एक सम्मिलित कर्सर के साथ खाली Tex2 फ़ील्ड मिलता है, लेकिन मुझे "1.0" – Andrey

+0

पर कर्सर के साथ खाली Tex2 खाली है) – Andrey

+0

यह हटाने की समस्या का समाधान नहीं करता है पाठ विजेट में अतिरिक्त नई लाइन ... –