4

我有一个带有输入框的 Tcl/Tk 窗口,我想在其中强制输入大写字符。也就是说,如果输入了任何字母,我希望它们在输入字段中以大写形式出现,而不是简单地拒绝任何小写输入。

我查看了 Tcl/Tk wiki 上的条目文档条目验证页面,但我一定没有在正确的地方寻找,因为虽然有很多验证示例,但我找不到过滤键的示例输入改变大小写。

我能得到的最接近的是以下内容:

entry .message -validate key -validatecommand {
    .message insert %i [string toupper "%S"]
    return 0
}

这将强制键入的第一个字符为大写,但不翻译后续字符。事实上,在第一个字符之后根本不会调用验证脚本。如果我省略了.message insert测试命令,则会为每个字符调用验证脚本。

4

2 回答 2

5

如果您在验证命令中为您的条目设置新值,验证将关闭(可能是为了防止无限循环)。但是,您可以在之后重新打开它:

entry .message -validate key -validatecommand {
    .message insert %i [string toupper "%S"]
    .message configure -validate key
    return 0
}
于 2010-02-15T05:17:16.570 回答
1

或者,您可以使用事件和绑定:

entry .message
bind .message <KeyRelease> {
    set v [string toupper [.message get]]
    .message delete 0 end
    .message insert 0 $v
    }

pack .message

这可以让您了解您可以做的事情的类型 - 事件中的处理在这里非常简单,并且可以大大改进。

于 2010-02-15T09:27:45.133 回答