1 user-interface scheme racket
开始在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)
Run Code Online (Sandbox Code Playgroud)
(对不起,如果有额外的括号).这是问题所在 - 当程序在两个面板的主窗口中启动时,但只有在交换机丢失后才会出现,而且只有一个单独处理.我直言不讳?如果你能给出一个更正或一个工作的例子,我将不胜感激(但请以"头"的决定,因为直到非常了解球拍,我无法理解,或多或少复杂).先感谢您!
你的代码中有更多的错误,而不仅仅是"额外的括号".您的示例代码对我来说根本不运行,表明您对Racket本身没有足够的基本熟练程度,无法在其中开发GUI方面取得非常有效的进展.这样一个错误的一个例子就是:
(define my-settings-hash "label" "Test")`
Run Code Online (Sandbox Code Playgroud)
的define形式不能形成这种方式; 在Racket(或Scheme)中没有意义
(define N A B)
Run Code Online (Sandbox Code Playgroud)
if N仅仅是一个标识符.
您应该在DrRacket中开发代码; 这将帮助您纠正您在代码中犯的许多错误.由于您#lang的代码顶部有一个指令,因此您应该能够立即开始使用DrRacket.
DrRacket容易捕获的错误的另一个例子:拼写错误的标识符my-settibgs-hash.
至于你如何实现标签的实际问题,正如你的要求,你应该阅读tab-panel%类本身的文档.DrRacket有一个集成的帮助台,因此您可以右键单击标识符tab-panel%,其中一个菜单选项是"查看文档,用于选项卡面板%来自racket/gui/base,racket/gui"; 单击该按钮将转到该类的文档网页的本地副本.
阅读完文档之后tab-panel%,请特别注意tab-panel%没有label参数,至少在版本5.3.2中没有(这是新的,但我怀疑这个界面在一段时间内没有显着改变).我不知道你在那里做什么,但我怀疑你正试图让某些文字显示在面板内.在Racket中创建文本有两种不同的选择; 最简单的可能是message%.(我建议浏览整个小部件库,因为其他小部件可能会更符合您的需求.)
这是我修改后的代码版本,从我正在运行的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)
Run Code Online (Sandbox Code Playgroud)