我可以选择使用Tkinter.Text
小部件进行验证吗?我不需要Text
的高级功能,只需要多行属性。不幸的是,它缺少textvariable
和validate
命令,因此我似乎无法附加某种回调来检查每次文本更改时的内容。我想避免必须绑定到<KeyRelease>
,因为它看起来捕获所有按键,包括Shift,Ctrl等等键,并且看起来有点乱。
我基本上只需检查文本字段是否为空,并根据需要启用/禁用“确定”按钮(即,如果没有文本,则禁用该按钮)。
代替这一点,有没有人遇到过Entry
的一个不错的子类,它增加了用Python编写的多行功能?有this,它将textvariable
添加到Text
,但它是用纯TCL而不是Python编写的,似乎很难集成到我现有的Python环境中。
答案 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()