在Racket的GUI库中,我可以使用text-field%
向窗口添加单行文本框。但是,我想将此文本框限制为仅允许键入整数。
处理此问题的一种可能方法是在键入字母时插入回调,以便自己将其添加到文本框中。 text-field%
类包含方法get-value
和set-value
,但仅用于对文本框进行编程修改,而不是用作回调。
另一种方法是在文本框中为允许的字符或字符串传递正则表达式,但似乎也不支持。
那么,有没有办法在Racket中创建一个只允许用户输入整数的文本字段?
答案 0 :(得分:1)
Rosetta Code似乎已经解决了这个问题。您可以在文本框中执行的操作设置一个用户键入时调用的回调。然后,您可以使用set-value
删除您不想要的角色。生成的text-field%
对象看起来像这样(从链接中获取):
(new text-field% [label "Value"] [parent frame] [init-value "0"]
[callback
(λ (f ev)
(define v (send f get-value))
(unless (string->number v)
(send f set-value (regexp-replace* #rx"[^0-9]+" v ""))))]))
如果框架是您放在文本框中的框架,请说:
(define frame (new frame% [label "Demo Frame"))