文本框中的Python Tkinter监听器

Don*_*uma 5 python tkinter

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

例如,如果我输入短语"turn me red",我想知道是否可以在不按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()
Run Code Online (Sandbox Code Playgroud)

dou*_*oug 4

因此,我认为如果我不编辑代码,而是提供一个新的工作代码示例来展示您感兴趣的行为,那么会更干净一些。

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

正如您在下面的倒数第二行中看到的,获得您想要的行为只需在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()
Run Code Online (Sandbox Code Playgroud)