在Racket中开始拾取GUI,并立即插入选项卡。这就是问题所在(要求代码不要太多来查找错误,我刚刚开始学习Racket):
#lang racket/gui
(define my-settings-hash (make-hash))
(define my-settings-hash "label" "Test")
(define my-settings-hash "width" 300)
(define my-settings-hash "height" 300)
(define my-tabs-list (list "Tab 0"
"Tab 1"
"Tab 2"))
(define root-wnd (new frame% [label (hash-ref my-settibgs-hash "label")]
[width (hash-ref my-settings-hash "width")]
[height (hash-ref my-settings-hash "height"]))
(define tab-panel (new tab-panel%
(parent root-wnd)
(choices my-tabs-list)
(callback
(lambda (tp e)
(case (send tp get-selection)
((0) (send tp change-children (lambda (children) (list a-panel))))
((1) (send tp change-children (lambda (children) (list b-panel))))
((2) (send tp change-children (lambda (children) (list a-panel)))))))))
(define a-panel (new panel%
(parent tab-panel)
(label "A-panel")))
(define b-panel (new panel%
(parent tab-panel)
(label "b-panel")))
(send frame show #t)
(抱歉,如果有多余的括号)。问题是,当程序在两个面板的主窗口中启动时,但只有在开关丢失后,其中一个才单独启动。我在哪里直言不讳?如果你能给出一个更正或一个工作示例,我将不胜感激(但请用"头"的决定,因为直到非常了解球拍,我都无法理解,或多或少都很复杂)。提前谢谢!
Racket语言理解中的错误
你的代码中有更多的错误,而不仅仅是"额外的括号"。你的示例代码对我来说根本无法运行,这表明你对Racket本身没有足够的基本熟练程度,无法在开发GUI方面取得非常有效的进展
(define my-settings-hash "label" "Test")`
define
表单不能以这种方式形成;在Racket(或Scheme)中说是没有意义的
(define N A B)
如果CCD_ 2仅仅是一个标识符。
开发方法论中的错误
您应该在DrRacket中开发您的代码;这将帮助您更正代码中的许多错误。由于您的代码顶部有一个#lang
指令,您应该能够立即在DrRacket中开始。
DrRacket很容易发现的另一个错误示例:拼写错误的标识符my-settibgs-hash
。
至于如何实现选项卡的实际问题,正如您所问的,您应该阅读tab-panel%
类本身的文档。DrRacket有一个集成的帮助台,因此您可以右键单击像tab-panel%
这样的标识符,提供的菜单选项之一是"从rack/gui/base,rack/gui查看选项卡面板%的文档";单击该按钮将转到该类的文档网页的本地副本。
选项卡面板%界面的使用错误
在阅读了tab-panel%
的文档后,请特别注意,tab-panel%
没有label
参数,至少在5.3.2版本中没有(这是新的,但我怀疑这个接口在一段时间内没有显著变化)。我不知道你想在那里做什么,但我怀疑你想让某种文本出现在面板内。在Racket中创建文本有几个不同的选项;最简单的可能是CCD_ 10。(不过,我建议浏览整个小部件库,因为其他小部件可能更适合您的需求。)
固定代码示例
这是我对你的代码的修改版本,是从我正在运行的DrRacket中剪切粘贴的。我尽可能多地忠实于你的原始代码(考虑到转录中存在的基本错误,我想你一定是从某个地方转录的;如果你能提供一个原始来源的链接,那就太好了)。
#lang racket/gui
(define my-settings-hash (make-hash))
(hash-set! my-settings-hash "label" "Test")
(hash-set! my-settings-hash "width" 300)
(hash-set! my-settings-hash "height" 300)
(define my-tabs-list (list "Tab 0"
"Tab 1"
"Tab 2"))
(define root-wnd (new frame% [label (hash-ref my-settings-hash "label")]
[width (hash-ref my-settings-hash "width")]
[height (hash-ref my-settings-hash "height")]))
(define tab-panel (new tab-panel%
(parent root-wnd)
(choices my-tabs-list)
(callback
(lambda (tp e)
(case (send tp get-selection)
((0) (send tp change-children (lambda (children) (list a-panel))))
((1) (send tp change-children (lambda (children) (list b-panel))))
((2) (send tp change-children (lambda (children)
(list a-panel)))))))))
(define a-panel (new panel% (parent tab-panel)))
(define a-text (new message% (parent a-panel) (label "A-panel")))
(define b-panel (new panel% (parent tab-panel)))
(define b-text (new message% (parent b-panel) (label "b-panel")))
(send root-wnd show #t)