在Tcl / Tk输入字段中强制输入大写输入

时间:2010-02-15 03:54:40

标签: tcl validation tk

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

我查看了Tcl / Tk wiki上entryEntry Validation页面的文档,但我不能找到正确的位置,因为尽管有很多验证示例,我找不到过滤键输入来改变大小写的例子。

我能得到的最接近的是:

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

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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

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

pack .message

这给出了你可以看到的事物类型的想法 - 事件中的处理非常简单,可以大大改进。