3

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

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

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

4

1 回答 1

4

与按钮的绑定<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()
于 2013-06-15T11:07:34.017 回答