【问题标题】:GUI component layout in Racket/SchemeRacket/Scheme 中的 GUI 组件布局
【发布时间】:2017-09-14 07:04:29
【问题描述】:

我正在为一个小型 GUI 程序使用以下代码:

#lang racket/gui

(define ff (new frame%
                [label "Adjust widths"]
                [height 100]
                [width 300]))
(new message% [parent ff][label "testing"])
(new text-field% [parent ff][label "tf1"])
(new text-field% [parent ff][label "tf2- a long prompt"])
(new text-field% [parent ff][label "tf3               "])
(new text-field% [parent ff][label "tf4               "])
(send ff show #t)

但是,我无法获得所需的布局:

我怎样才能获得上述布局。我看到text-field 和其他组件具有最小宽度和可拉伸宽度。如果这些是默认的,哪些是实际的,我不清楚。如何修复text-field 的宽度?我应该为此使用table-panel 包吗?感谢您的帮助。

编辑:我检查了https://docs.racket-lang.org/gui/windowing-overview.html?q=gui 并尝试了不同的选项,例如[min-width 50][stretchable width #f],但显然不可能将文本字段的大小固定为特定值。

【问题讨论】:

    标签: user-interface scheme racket


    【解决方案1】:

    一种可能性是首先将标签设置为最大宽度,然后将它们更改为所需的标签。这至少对我有用。

    #lang racket/gui
    
    (define ff (new frame%
                    [label "Adjust widths"]
                    [height 100]
                    [width 300]))
    (new message% [parent ff][label "testing"])
    (define strings
      '("tf1" "tf2- a long prompt" "tf3" "tf4"))
    (define str-max (argmax string-length strings))
    (define txt-fields
      (for/list ([str (in-list strings)])
        (new text-field% [parent ff] [label str-max])))
    
    (for ([tf (in-list txt-fields)]
          [str (in-list strings)])
      (send tf set-label str))
    
    (send ff show #t)
    

    由于字体可能没有固定宽度,您可能希望使用下划线作为最大长度的字符串。

    另一种可能性是通过传递#f 作为参数来完全摆脱文本字段的标签,并使用message% 创建自己的标签,您实际上可以使用min-width 控制宽度。您可能需要将消息和文本字段放入horizontal-panel%

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 2018-11-10
      • 2014-03-08
      • 2013-09-08
      • 2019-05-25
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多