Python 如何从Tkinter文本小部件读取文本

Python 如何从Tkinter文本小部件读取文本,python,tkinter,Python,Tkinter,我试图完成的是在我的文本小部件中输入一个“AAAATTTCA”字符串,并让标签返回出现的次数。输入“ATC”后,函数将返回Num As:1 Num Ts:1 Num Cs:1 Num Gs:0 我不明白的是为什么我没有正确阅读我的文本区域 我认为您误解了Python和Tkinter的一些概念 创建按钮时,命令应该是对函数的引用,即不带()的函数名。实际上,在创建按钮时,只需调用一次密码函数。不能向该函数传递参数。您需要使用全局变量(或者更好,将其封装到类中) 如果要修改标签,只需设置String

我试图完成的是在我的文本小部件中输入一个“AAAATTTCA”字符串,并让标签返回出现的次数。输入“ATC”后,函数将返回Num As:1 Num Ts:1 Num Cs:1 Num Gs:0


我不明白的是为什么我没有正确阅读我的文本区域

我认为您误解了Python和Tkinter的一些概念

创建按钮时,命令应该是对函数的引用,即不带()的函数名。实际上,在创建按钮时,只需调用一次密码函数。不能向该函数传递参数。您需要使用全局变量(或者更好,将其封装到类中)

如果要修改标签,只需设置StringVar。实际上,每次调用cipher时,您的代码都会创建一个新标签

有关工作示例,请参见下面的代码:

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 A,是吗?(我数5)。虽然在这个具体的例子中这并不重要,但当你得到文本时,你应该使用“end-1c”索引。文本小部件总是保证在结尾处有一个换行符,这在获取文本时通常是不需要的,因为它不是用户键入内容的一部分。
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()