2010-11-01 13 views
6

मैं पाठ के हाइलाइट किए गए हिस्से से एक स्ट्रिंग प्राप्त करने में सक्षम होना चाहता हूं, मैं इसके बारे में कैसे जा सकता हूं?मैं टिंकर टेक्स्ट बॉक्स से एक चयनित स्ट्रिंग कैसे प्राप्त करूं?

उत्तर

7

एक Tkinter.Text या Tkinter.Entry विजेट के लिए, आप उपयोग कर सकते हैं:

content = text.selection_get() 

दोनों एक प्रविष्टि से और अजगर कंसोल में एक पाठ विजेट से पाठ का चयन होने की इंटरएक्टिव उदाहरण: अनुसार

>>> import Tkinter 
>>> w = Tkinter.Tk() 
>>> e = Tkinter.Entry(w) 
>>> e.pack() 
>>> t = Tkinter.Text(w) 
>>> t.pack() 
#(scribble at the widgets in the created window, and select text in the Entry) 
>>> e.selection_get() 
'1234' 
#(select text) 
>>> t.selection_get() 
'1234' 
>>> 

ब्रायन ओकले की टिप्पणी:

selection_get सभी विजेट्स के लिए एक सामान्य विजेट विधि उपलब्ध है। यह हमेशा टेक्स्ट विजेट से चयनित स्ट्रिंग प्राप्त नहीं करता है। यह हो सकता है, लेकिन इसकी गारंटी नहीं है। यह क्या करता है जिसे "एक्स" चयन कहा जाता है (टीके की एक्स 11 जड़ों से)। यदि आप exportselection को टेक्स्ट विजेट के लिए गलत पर सेट करते हैं, तो selection_get काम करने में विफल रहेगा। तो आपका सुझाव सामान्य मामले में काम करेगा, लेकिन सभी मामलों में नहीं।

+0

टेक्स्ट विजेट में 'select_get' विधि नहीं है। –

+0

@ ब्रायन ओकले: आप किस संस्करण का उपयोग कर रहे हैं? मैं टिंकर का उपयोग कर रहा हूं कि पायथन 2.7 के साथ जहाजों, और मेरे टेक्स्ट विजेट्स में निश्चित रूप से 'चयन_get' है। (मैंने बस एक कंसोल सेक्शन में फिर से कोशिश करने के लिए कोशिश की और यह काम किया)। – jsbueno

+1

मुझे और सटीक होना चाहिए था: टेक्स्ट विजेट में 'select_get' विधि नहीं है। 'select_get' सभी विजेट्स के लिए उपलब्ध एक सामान्य विजेट विधि है। यह टेक्स्ट विजेट से चयनित स्ट्रिंग _not_ प्राप्त नहीं करता है। यह हो सकता है, लेकिन इसकी गारंटी नहीं है। यह क्या करता है जिसे "एक्स" चयन कहा जाता है (टीके की एक्स 11 जड़ों से)। यदि आप टेक्स्ट विजेट के लिए गलत निर्यात करने के लिए 'exportelection' सेट करते हैं, तो' select_get' काम करने में विफल रहेगा। तो आपका सुझाव सामान्य मामले में काम करेगा, लेकिन सभी मामलों में नहीं। –

6

get विधि का उपयोग करें। यदि आप चाहते हैं कि चयनित टेक्स्ट इंडेक्स SEL_FIRST और SEL_LAST का उपयोग करें।

[संपादित करें]] टिप्पणियों में से एक ने अनुमान लगाया कि यह टिंकर के साथ काम नहीं करता क्योंकि कोई विशेषता "सेल" नहीं थी। "सेल" एक विशेषता नहीं है, यह एक टैग है। टैग टेक्स्ट विजेट की एक उल्लेखनीय शक्तिशाली विशेषता है।

import Tkinter as tk 
import tkFont 

class App: 
    def __init__(self): 
     root=tk.Tk() 
     self.text = tk.Text(root) 
     self.text.pack() 
     self.button = tk.Button(root, text="Get Selection", command=self.OnButton) 
     self.button.pack() 
     root.mainloop() 

    def OnButton(self): 
     print "selected text: '%s'" % self.text.get(tk.SEL_FIRST, tk.SEL_LAST) 


app=App() 

, काम करने के लिए इस डेमो पाठ बॉक्स में कुछ पाठ लिखें तो बटन दबाएँ के लिए:

यहाँ एक उदाहरण है।

+0

मैं पाठ या एंट्री विजेट में कोई इस तरह के "sel" विशेषता देखते हैं - हो सकता है कि आप टीसीएल से उपलब्ध विधियों के प्रति referring कर रहे हैं, लेकिन यह Python में दूसरे नाम के तहत लपेटा गया है? – jsbueno

+0

@jsbueno: 'sel' एक विशेषता नहीं है। यह एक टेक्स्ट टैग है जो चयन का प्रतिनिधित्व करता है, और यह टिंकर के तहत उपलब्ध है। –

+0

रुपये द्वारा परिभाषित अंतर्निहित स्ट्रिंग का उपयोग करने की आवश्यकता नहीं है। 'टिंकर' में एक चर को परिभाषित करने के लिए परिभाषित किया गया है - 'SEL_FIRST' और 'SEL_LAST'। – ArtOfWarfare

4

पाठ विजेट एक विशेष टैग 'sel' नाम दिया, text_widget.tag_ranges के माध्यम से Tkinter.SEL के माध्यम से सुलभ और परीक्षण योग्य (Tkinter.SEL) है, जो आप "चयनित" पाठ को पुनः प्राप्त करने की अनुमति देता है।

if textWidget.tag_ranges(Tkinter.SEL): 
    print('SELECTED Text is %r' % textWidget.get(Tkinter.SEL_FIRST, Tkinter.SEL_LAST)) 
else: 
    print('NO Selected Text') 

आप एक से थोड़ा अधिक उन्नत समाधान चाहते हैं, तो आप भी कोशिश कर सकते हैं:: यहाँ एक सरल उदाहरण है

ranges = textWidget.tag_ranges(Tkinter.SEL) 
if ranges: 
    print('SELECTED Text is %r' % textWidget.get(*ranges)) 
else: 
    print('NO Selected Text') 
+1

प्लस 1 यह जांचने के लिए कि क्या कोई चयनित टेक्स्ट शुरू करने के लिए है या नहीं। अन्यथा SEL_FIRST/LAST त्रुटि होगी :-) –

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