验证Tkinter.Text小部件?

时间:2013-06-15 05:18:23

标签: python python-2.7 tkinter

我可以选择使用Tkinter.Text小部件进行验证吗?我不需要Text的高级功能,只需要多行属性。不幸的是,它缺少textvariablevalidate命令,因此我似乎无法附加某种回调来检查每次文本更改时的内容。我想避免必须绑定到<KeyRelease>,因为它看起来捕获所有按键,包括Shift,Ctrl等等键,并且看起来有点乱。

我基本上只需检查文本字段是否为空,并根据需要启用/禁用“确定”按钮(即,如果没有文本,则禁用该按钮)。

代替这一点,有没有人遇到过Entry的一个不错的子类,它增加了用Python编写的多行功能?有this,它将textvariable添加到Text,但它是用纯TCL而不是Python编写的,似乎很难集成到我现有的Python环境中。

1 个答案:

答案 0 :(得分:3)

绑定到<KeyRelease>按钮不需要太乱,您不必检查按下的键的值,而是获取小部件的内容。请记住,它最后总是有一个'\ n',因此当您重新检索内容时,不要忘记丢弃它:

content = text.get(1.0, "end-1c")

然后你只需要根据这个值改变按钮的状态:

import Tkinter as tk

def configure_ok_button(event):
    content = event.widget.get(1.0, "end-1c")
    state = "active" if content else "disabled"
    button.configure(state=state)

root = tk.Tk()
text = tk.Text(root)
button = tk.Button(root, text="Ok", state="disabled")
text.bind("<KeyRelease>", configure_ok_button)
text.pack()
button.pack()
root.mainloop()