动态添加选项到球拍中的选项%框

时间:2017-09-21 15:18:23

标签: user-interface racket

在Racket中,我可以创建一个选项框:

(define f (new frame% [label "HI"]))
(define my-box
  (new choice% [parent f]
               [label "Some choices"]
               [choices (list "Choice A" "Choice B")]))

我会得到一个看起来像这样的窗口:

Example Window

问题是我必须在创建choices类的同时构建choice%字段。有没有什么办法可以在创建框之后动态地将项目添加到列表中,而无需完全删除框并添加一个带有新选项的新框?

1 个答案:

答案 0 :(得分:0)

可以动态添加和删除列表中的项目,因为choice%框实现了list-control<%>界面。此功能被分解为一个通用接口,因为list-box%类具有非常相似的需求。

这使您能够在列表中appendcleardelete项。以及查询列表的索引和那里的值。

例如,以下程序每5秒左右为程序的前50(或左右)秒添加一个列表项:

#lang racket/gui

(define f (new frame% [label "HI"]))
(define my-box
  (new choice% [parent f]
       [label "Some choices"]
       [choices '()]))

(thread
 (λ ()
   (for ([i (in-range 10)])
     (send my-box append (number->string i))
     (sleep 5))))

(send f show #t)

然而,有一个问题需要注意,初始列表用于设置选择%&#39;的宽度。因此,您可能希望使用min-width手动设置,或者最初使用您可以立即清除的最宽元素填充它。