首页 > 解决方案 > 在 Tkinter 的 Entry 小部件中输入文本时启用按钮

问题描述

因此,我试图在使用 tkinter 在条目小部件中输入文本时启用该按钮,但是我不认为它可以工作。我的代码是:

def capture():
    if e.get():
        button['state'] = 'normal'

e = Entry(root, font = 20,borderwidth=5,command = capture)
e.pack()

但是我知道 Entry 小部件没有称为命令的参数。

标签: pythontkinter-entry

解决方案


实现这一目标的方法之一是使用StringVar

def capture(*args):
    if e.get():
        button['state'] = 'normal'
    else:
        button['state'] = 'disabled'

var = StringVar()
e = Entry(root, font = 20,borderwidth=5,textvariable=var)
e.pack()

var.trace('w',capture)

trace()每次var更改值时都会调用提供的回调。

第二种方法是使用bind

def capture():
    if e.get():
        button['state'] = 'normal'
    else:
        button['state'] = 'disabled'

e = Entry(root, font = 20,borderwidth=5)
e.pack()
e.bind('<KeyRelease>',lambda e: capture()) # Bind keyrelease to the function

使用bind,每次释放键时都会调用该函数,无论键是什么。这可能会更好一些,因为您不是StringVar为了使用它而创建trace.


推荐阅读