2011-04-06 12 views
9
from Tkinter import * 
window = Tk() 

frame=Frame(window) 
frame.pack() 

text_area = Text(frame) 
text_area.pack() 
text1 = text_area.get('0.0',END) 

def cipher(data): 
    As,Ts,Cs,Gs, = 0,0,0,0 
    for x in data: 
     if 'A' == x: 
      As+=1 
     elif x == 'T': 
      Ts+=1 
     elif x =='C': 
      Cs+=1 
     elif x == 'G': 
      Gs+=1 

    result = StringVar() 
    result.set('Num As: '+str(As)+' Num of Ts: '+str(Ts)+' Num Cs: '+str(Cs)+' Num Gs: '+str(Gs)) 
    label=Label(window,textvariable=result) 
    label.pack() 

button=Button(window,text="Count", command= cipher(text1)) 
button.pack() 
window.mainloop() 

जो मैं पूरा करने की कोशिश कर रहा हूं, वह मेरे टेक्स्ट विजेट में 'एएएएटीटीटीसीए' की एक स्ट्रिंग में प्रवेश कर रहा है और लेबल की घटनाओं की संख्या वापस कर रहा है। एंट्री 'एटीसी' के साथ समारोह में नंबर वापस आ जाएगा: 1 नम टीएस: 1 न्यू सीएस: 1 न्यू जीएस: 0.टिंकर टेक्स्ट विजेट

मुझे समझ में नहीं आता है कि मैं अपने टेक्स्ट_रेरा में सही तरीके से क्यों नहीं पढ़ रहा हूं।

+0

कृपया इंडेंट आप कोड को ठीक – P2bM

+0

इनपुट आप का उल्लेख को देखते हुए, क्या तुम सच में की उम्मीद नहीं है 1 एक, है न? (मैं 5 गिनती)। – GreenMatt

उत्तर

12

मुझे लगता है कि आप पाइथन एक टिंकर की कुछ अवधारणाओं को गलत समझते हैं।

जब आप बटन बनाते हैं, तो कमांड को फ़ंक्शन का संदर्भ होना चाहिए, यानी() के बिना फ़ंक्शन का नाम होना चाहिए। असल में, आप बटन के निर्माण पर एक बार सिफर फ़ंक्शन को कॉल करते हैं। आप उस समारोह में तर्क पारित नहीं कर सकते हैं। आपको वैश्विक चर (या बेहतर, कक्षा में इसे समाहित करने के लिए) का उपयोग करने की आवश्यकता है।

जब आप लेबल को संशोधित करना चाहते हैं, तो आपको केवल स्ट्रिंगवार सेट करने की आवश्यकता है। असल में, आपका कोड प्रत्येक बार सिफर कहलाता है जब एक नया लेबल बनाता है।

देखें एक काम उदाहरण के लिए नीचे दिए गए कोड:

from Tkinter import * 

def cipher(): 
    data = text_area.get("1.0",END) 

    As,Ts,Cs,Gs, = 0,0,0,0 

    for x in data: 
     if 'A' == x: 
      As+=1 
     elif x == 'T': 
      Ts+=1 
     elif x =='C': 
      Cs+=1 
     elif x == 'G': 
      Gs+=1 
    result.set('Num As: '+str(As)+' Num of Ts: '+str(Ts)+' Num Cs: '+str(Cs)+' Num Gs: '+str(Gs)) 

window = Tk() 

frame=Frame(window) 
frame.pack() 

text_area = Text(frame) 
text_area.pack() 

result = StringVar() 
result.set('Num As: 0 Num of Ts: 0 Num Cs: 0 Num Gs: 0') 
label=Label(window,textvariable=result) 
label.pack() 

button=Button(window,text="Count", command=cipher) 
button.pack() 

window.mainloop() 
+1

जबकि यह वास्तव में इस विशिष्ट उदाहरण में कोई फर्क नहीं पड़ता है, जब आपको टेक्स्ट मिलता है तो आपको "एंड -1 सी" की अनुक्रमणिका का उपयोग करना चाहिए। पाठ विजेट हमेशा अंत में एक नई लाइन की गारंटी देता है जिसे आप आम तौर पर पाठ प्राप्त करते समय नहीं चाहते हैं क्योंकि यह उपयोगकर्ता द्वारा टाइप किए गए हिस्से का हिस्सा नहीं है। –

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