2011-04-06 3 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() 

내 텍스트 위젯에 'AAAATTTCA'라는 문자열을 입력하고 레이블에 발생 횟수를 반환하도록하고 있습니다. 'ATC'항목은 Num As : 1 Num Ts : 1 Num Cs : 1 Num Gs : 0을 반환합니다.Tkinter 텍스트 위젯에서 텍스트를 읽는 방법

내가 이해하지 못하는 것은 text_area에서 올바르게 읽지 못하는 이유입니다.

+0

당신이 언급 입력을 감안할 때 제대로 – P2bM

+0

를 코딩 들여하십시오, 당신이 정말로 기대하지 않는다 (1) A, 당신은? (나는 5를 세운다). – GreenMatt

답변

12

나는 파이썬의 개념을 Tkinter로 잘못 이해한다고 생각합니다.

버튼을 만들 때 명령은 함수, 즉()가없는 함수 이름에 대한 참조 여야합니다. 사실, 버튼을 만들 때 암호 함수를 한 번 호출합니다. 해당 함수에 인수를 전달할 수 없습니다. 전역 변수를 사용해야합니다 (또는 이것을 클래스에 캡슐화하는 것이 더 좋습니다).

레이블을 수정하려면 StringVar 만 설정하면됩니다. 사실, 암호는 암호가 호출 될 때마다 새 레이블을 만듭니다.

작업, 예를 들어 아래

참조 코드 :

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

이 특정 예제에서는 실제로 중요하지 않지만 텍스트를 가져올 때는 "end-1c"인덱스를 사용해야합니다. 텍스트 위젯은 항상 사용자가 입력 한 내용의 일부가 아니기 때문에 텍스트를 가져올 때 일반적으로 원하지 않는 끝에있는 줄 바꿈을 보장합니다. –

관련 문제