仅接受Racket GUI库中的数字的文本框

时间:2016-10-21 22:32:35

标签: user-interface racket

在Racket的GUI库中,我可以使用text-field%向窗口添加单行文本框。但是,我想将此文本框限制为仅允许键入整数。

处理此问题的一种可能方法是在键入字母时插入回调,以便自己将其添加到文本框中。 text-field%类包含方法get-valueset-value,但仅用于对文本框进行编程修改,而不是用作回调。

另一种方法是在文本框中为允许的字符或字符串传递正则表达式,但似乎也不支持。

那么,有没有办法在Racket中创建一个只允许用户输入整数的文本字段?

1 个答案:

答案 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"))