2010-11-19 3 views
5

मैं जानना चाहता हूं कि (यदि संभव हो) किसी टेक्स्ट वाक्यांश में दर्ज किए गए किसी निश्चित वाक्यांश या शब्द को सुनना और कमांड चलाएं।टेक्स्ट बॉक्स में पाइथन टिंकर श्रोता

उदाहरण के लिए यदि मैं "मुझे बारी बारी से" वाक्यांश टाइप करता हूं तो मैं जानना चाहता हूं कि प्रवेश को दबाए बिना इसे लाल करना संभव है या नहीं।

from Tkinter import * 

class mywidgets: 
    def __init__(self,root): 
     frame=Frame(root) 
     frame.pack() 
     self.txtfr(frame) 
     return 

    def txtfr(self,frame): 

     #define a new frame and put a text area in it 
     textfr=Frame(frame) 
     self.text=Text(textfr,height=10,width=50,background='white') 

     # put a scroll bar in the frame 
     scroll=Scrollbar(textfr) 
     self.text.configure(yscrollcommand=scroll.set) 

     #pack everything 
     self.text.pack(side=LEFT) 
     scroll.pack(side=RIGHT,fill=Y) 
     textfr.pack(side=TOP) 
     return 
def main(): 
    root = Tk() 
    s=mywidgets(root) 
    root.title('textarea') 
    root.mainloop() 
main() 
+0

किसी को भी पता है कि क्या करना है? – DonJuma

उत्तर

4

इसलिए मैंने सोचा कि यह एक छोटे क्लीनर हो सकता है अगर बजाय अपने कोड को संपादित, मैं सिर्फ कोड है कि व्यवहार में रुचि रखते हैं दर्शाती है काम करने का एक ताजा उदाहरण प्रदान की

यहाँ नीचे कोड करता है:। जब आप इसे चलाने के लिए, उपयोगकर्ता को कुछ मूल्य प्रदान करने के लिए, एक खाली टेक्स्ट बॉक्स (तकनीकी रूप से, लेबल में Tkinter) के साथ एक छोटा विजेट मिलता है। जब वे एक संख्यात्मक मान (पूर्णांक या फ्लोट) दर्ज करते हैं और फिर पर क्लिक करें बटन की गणना करें तो मीटर में समकक्ष मूल्य नीचे दिखाई देता है। तथापि, 'लाल' में उपयोगकर्ता कुंजी तो शब्द 'ब्लू' प्रतीत होता है जैसे ही यह दर्ज किया गया है -। यानी, ब्लू भले ही गणना बटन है और न ही कुछ और करने पर प्राप्त हुई दिखाई देगा।

जैसा कि आप नीचे दी गई अंतिम पंक्ति में देख सकते हैं, जो व्यवहार आप चाहते हैं उसे प्राप्त करना केवल टिंकर इवेंट सिंटैक्स में इच्छित व्यवहार का वर्णन करने का विषय है।

from Tkinter import * 
import ttk 

root = Tk() 

def calculate(*args) : 
    value = float(feet.get()) 
    meters.set((0.305 * value * 10000. + .5)/10000.) 

def callback_function(*args) : 
    meters.set('blue') 

mf = ttk.Frame(root, padding="3 3 12 12") 
mf.grid(column=0, row=0, sticky=(N, W, E, S)) 
mf.columnconfigure(0, weight=1) 
mf.rowconfigure(0, weight=1) 

feet = StringVar() 
meters = StringVar() 

feet_entry = ttk.Entry(mf, width=7, textvariable=feet) 
feet_entry.grid(column=2, row=1, sticky=(W, E)) 

ttk.Label(mf, textvariable=meters, background='#E9D66B').grid(column=2, 
      row=2, sticky=(W, E)) 

ttk.Button(mf, text="Calculate", command=calculate).grid(column=2,row=3, 
      sticky=W) 

ttk.Label(mf, text="feet").grid(column=3, row=1, sticky=W) 
ttk.Label(mf, text="is equivalent to").grid(column=1, row=2, sticky=E) 
ttk.Label(mf, text="meters").grid(column=3, row=2, sticky=W) 

for child in mf.winfo_children(): 
    child.grid_configure(padx=5, pady=5) 

feet_entry.focus() 
root.bind('<Return>', calculate) 

# this is the key line 
root.bind('red', callback_function) 

root.mainloop() 
+0

मैं विंडोज़ पर हूं और यह कहता है कि यह टीटीके नहीं ढूंढ सकता है। क्या यह अजगर के साथ आता है। मैंने इसे गुगल किया लेकिन केवल लिनक्स सामान मिला? पाइथन वी 2.6 – DonJuma

+0

का उपयोग करके बस इससे छुटकारा पाएं - यानी, 'ttk' की हर घटना को प्रतिस्थापित करें। '' (और स्पष्ट रूप से लाइन आयात करने वाली टीटीके को हटा दें)। – doug

+0

ओह ठीक है, यह बहुत अच्छा काम करता है। – DonJuma

1

क्या आप चाहते हैं निश्चित रूप से संभव है:

मैं बस शुरू कर दिया और यहाँ मैं क्या है। समाधान आप वास्तव में क्या चाहते हैं पर निर्भर करता है।

क्या आप कुछ लाल रंग बदलना चाहते हैं यदि उपयोगकर्ता टाइप करता है तो "मुझे लाल करें" ठीक है? या, यदि पाठ "मुझे नीला कर देता है" और वे "नीला" शब्द को "लाल" में बदलते हैं, तो क्या यह क्रिया को ट्रिगर करेगा?

यदि पूर्व (बिल्कुल सही "मुझे लाल चालू करें" टाइप करना चाहिए) तो आप बस उस सटीक अनुक्रम (उदाहरण: widget.bind("<t><u><r><n><space><m><e>....", doSomething)) से बांध सकते हैं। प्रबंधन करना असंभव हो जाता है, हालांकि, यदि आप भी वही काम करने के लिए "मुझे लाल करें" चाहते हैं।

यदि उत्तरार्द्ध (जब भी आप कुछ भी टाइप करते हैं तो यह देखने के लिए लगता है कि "इसे लाल करें" प्रविष्टि बिंदु से घिरा हुआ है), यह एक छोटा सा और काम है। आप <KeyRelease> पर बाध्य कर सकते हैं और फिर जादू वाक्यांश के लिए सम्मिलन बिंदु से पहले वर्णों को देखें।

नीचे की रेखा है, आप <KeyRelease> जैसी सामान्य जेनेरिक पर बाध्यकारी सेट अप करते हैं, फिर कॉलबैक में निर्णय लें, या सटीक वाक्यांश के लिए अत्यधिक विशिष्ट बाइंडिंग सेट करें।

+0

आप के बारे में कैसे जाएंगे, यह एक उदाहरण है जिसे आप लिंक कर सकते हैं क्योंकि आप मुझे बिल्कुल नया बता सकते हैं। – DonJuma