文本框中的Python Tkinter侦听器

文本框中的Python Tkinter侦听器,python,tkinter,Python,Tkinter,我想知道如何(如果可能的话)收听输入到文本框中的某个短语或单词并运行命令 例如,如果我键入短语“将我变成红色”,我想知道是否可以在不按enter键的情况下将其变成红色 我刚刚开始,以下是我所拥有的: from Tkinter import * class mywidgets: def __init__(self,root): frame=Frame(root) frame.pack() self.txtfr(frame)

我想知道如何(如果可能的话)收听输入到文本框中的某个短语或单词并运行命令

例如,如果我键入短语“将我变成红色”,我想知道是否可以在不按enter键的情况下将其变成红色

我刚刚开始,以下是我所拥有的:

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()

你想要的当然是可能的。解决方案取决于你真正想要什么

是否仅当用户准确键入“turn me red”时才将某些内容变为红色?或者,如果文本是“将我变成蓝色”,他们将“蓝色”一词改为“红色”,这会触发行动吗

如果是前者(必须准确地键入“turneme red”),您只需绑定到准确的序列(例如:
widget.bind(“…”,doSomething)
)。然而,如果你还想“让我变红”做同样的事情,那就不可能做到

如果是后者(无论何时键入任何内容,它都会查看插入点周围是否有“将其变为红色”),则需要稍微多做一点工作。您可以绑定
,然后查看魔术短语插入点之前的字符


底线是,你可以在一些通用的东西上设置一个绑定,比如
,然后在回调中做出决定,或者为一个确切的短语设置一个高度特定的绑定。

所以我认为与其编辑你的代码,不如更简洁一些,我刚刚提供了一个新的工作代码示例,展示了您感兴趣的行为

下面的代码是这样做的:当您运行它时,您会得到一个带有空文本框的小部件(从技术上讲,是Tkinter中的标签),供用户提供一些值。当他们输入一个数值(整数或浮点)并单击“计算”按钮时,以米为单位的等效值显示在下方。但是,如果用户以“红色”键输入,则输入后会立即显示“蓝色”一词,即,即使单击了“计算”按钮或其他任何内容,也会显示蓝色

正如您在下面倒数第二行中所看到的,获取所需的行为只需在Tkinter事件语法中描述所需的行为

从Tkinter导入*
导入ttk
root=Tk()
def计算(*args):
值=浮动(feet.get())
仪表组((0.305*值*10000.+.5)/10000)
def回调函数(*args):
仪表组(“蓝色”)
mf=ttk.Frame(根,padding=“3 3 12”)
mf.grid(列=0,行=0,粘性=(N,W,E,S))
mf.columnconfigure(0,权重=1)
mf.rowconfigure(0,权重=1)
英尺=StringVar()
米=StringVar()
英尺\输入=ttk.输入(mf,宽度=7,文本变量=英尺)
feet_entry.grid(列=2,行=1,粘性=(W,E))
ttk.Label(mf,textvariable=meters,background='#E9D66B')。grid(column=2,
行=2,粘性=(W,E))
ttk.按钮(mf,text=“Calculate”,command=Calculate).grid(列=2,行=3,
粘性=W)
ttk.Label(mf,text=“feet”).grid(列=3,行=1,粘性=W)
ttk.Label(mf,text=“相当于”).grid(列=1,行=2,粘滞=E)
ttk.Label(mf,text=“meters”).grid(列=3,行=2,粘性=W)
对于mf.winfo_children()中的子项:
配置子网格(padx=5,pady=5)
foots_entry.focus()
root.bind(“”,计算)
#这是关键线路
root.bind('red',回调函数)
root.mainloop()

你会怎么做?有没有一个例子可以链接到,因为你可以告诉我,我是新来的。我在windows上,它说找不到ttk。这是python自带的吗。我在谷歌上搜索了一下,但只找到了Linux的东西?使用Pythonv2.6时,只需去掉它——也就是说,将“ttk.”的每一次出现都替换为“”(并且显然删除了导入ttk的行)。
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()