规范 - 带有进度条的水平面板占据了中间的所有 space

Spec - horizontal panel with progress bar taking all the space in the middle

我想创建一行包含三个元素的标签、进度条和第二个标签。为此,我使用了以下代码:

(SpBoxLayout newLeftToRight
    spacing: 15;
    add: secondsPassed expand: false;
    add: progressBar withConstraints: [ :constraints | 
        constraints
            height: 10;
            fill: false;
            width: 280 ];
    add: timeRemaining expand: false;
    yourself)

我已经明确设置了宽度限制,但我想做的是无论行有多宽,它都占据两个标签之间的所有 space。
这样它的宽度是灵活的,两个标签是固定的。

基本上,第一个和第三个设置为expand: false,第二个设置为expand: true(这是默认值)。 对于你想要的,这应该足够了:

(SpBoxLayout newLeftToRight
    spacing: 15;
    add: secondsPassed expand: false;
    add: progressBar;
    add: timeRemaining expand: false;
    yourself)

如果您删除那里的宽度限制,应该允许它扩展,因为大小不再固定。另外,请注意,在 SpBoxLayout 的当前实现中,宽度和高度不能共存,因为它们适用于不同的布局类型:

  • width 适用于水平(从左到右)布局
  • height 适用于垂直 (topToBottom) 布局。

假设您安装了 Gtk 后端,此代码:

presenter := SpPresenter new.
presenter application: (SpApplication new useBackend: #Gtk).

presenter layout: (SpBoxLayout newLeftToRight 
    vAlignStart;
    borderWidth: 15;
    spacing: 15;
    add: (presenter newLabel label: 'One') expand: false;
    add: (presenter newProgressBar fixedAt: 50 percent);
    add: (presenter newLabel label: 'Two') expand: false;
    yourself).
    
presenter openWithSpec title: 'Example of Horizontal Layout'

将产生此输出: