fyne 从一片容器中创建容器中的行

fyne create rows in a container from a slice of containers

我需要一个名为 rows 的切片,其中包含许多 fyne.Container 结构。 然后我需要将它们全部显示为 window.

中的行

我试过这样做:

rows := []*fyne.Container{}
rows = append(
    rows, 
    container.New(
        layout.NewGridLayout(4),
        widget.NewLabel("Trigger"),
        widget.NewLabel("Text"),
        widget.NewLabel("Enter"),
        widget.NewLabel("Active"),
    ),
)

w.SetContent(
    container.New(
        layout.NewGridLayout(1),
        rows...
    ),
)

但我明白了

cannot use rows (type []*fyne.Container) as type []fyne.CanvasObject in argument to container.New

而且我不明白为什么要这样做:

w.SetContent(
    container.New(
        layout.NewGridLayout(1),
        container.New(
            layout.NewGridLayout(4),
            widget.NewLabel("Trigger"),
            widget.NewLabel("Text"),
            widget.NewLabel("Enter"),
            widget.NewLabel("Active"),
        ),
        container.New(
            layout.NewGridLayout(4),
            widget.NewLabel("Trigger"),
            widget.NewLabel("Text"),
            widget.NewLabel("Enter"),
            widget.NewLabel("Active"),
        ),
    ),
)

它工作正常...它不应该是相同的传递单个结构或 []type...吗?

谢谢!

该方法需要一片 fyne.CanvasObjects,这是结构 fyne.Container 实现的接口。

不能使用结构类型的切片代替接口类型的切片,即使结构类型满足接口也是如此。

你的切片应该是接口类型而不是结构类型。然后,您可以将满足该接口的对象附加到该切片:

rows := []fyne.CanvasObject{}
rows = append(
    rows, 
    container.New(
        layout.NewGridLayout(4),
        widget.NewLabel("Trigger"),
        widget.NewLabel("Text"),
        widget.NewLabel("Enter"),
        widget.NewLabel("Active"),
    ),
)