在Racket中,我可以创建一个选项框:
(define f (new frame% [label "HI"]))
(define my-box
(new choice% [parent f]
[label "Some choices"]
[choices (list "Choice A" "Choice B")]))
我会得到一个看起来像这样的窗口:
问题是我必须在创建choices
类的同时构建choice%
字段。有没有什么办法可以在创建框之后动态地将项目添加到列表中,而无需完全删除框并添加一个带有新选项的新框?
答案 0 :(得分:0)
可以动态添加和删除列表中的项目,因为choice%
框实现了list-control<%>
界面。此功能被分解为一个通用接口,因为list-box%
类具有非常相似的需求。
这使您能够在列表中append
,clear
和delete
项。以及查询列表的索引和那里的值。
例如,以下程序每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
手动设置,或者最初使用您可以立即清除的最宽元素填充它。