1

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

我试过这样做:

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...
    ),
)

但我明白了

不能在 container.New 的参数中使用行(类型 []*fyne.Container)作为类型 []fyne.CanvasObject

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

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"),
        ),
    ),
)

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

谢谢!

4

1 回答 1

2

该方法需要一个 s 切片fyne.CanvasObject,它是结构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"),
    ),
)
于 2021-07-05T15:59:27.847 回答