省略号扩展 fyne NewVBox
ellipsis expansion fyne NewVBox
我正在尝试创建一个带有一系列按钮的 Fyne 垂直框,但无法弄清楚基本机制。我觉得这是一道围棋题,不是费恩题,围棋我不懂。
这是一个最小的程序来说明我的意思:
package main
import (
"fmt"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
a := app.New()
w := a.NewWindow("Button List")
btn0 := widget.NewButton("button 0", func() {
fmt.Println("Pressed 0")
})
btn1 := widget.NewButton("button 1", func() {
fmt.Println("Pressed 1")
})
btns := []*widget.Button{btn0, btn1}
vbox := container.NewVBox(
// does work
btns[0],
btns[1],
// doesn't work
// btns...,
)
w.SetContent(
vbox,
)
w.ShowAndRun()
}
我的理解是参数 btns...
应该产生与参数列表 btn[0], btn[1]
相同的效果,但它显然不会。如果我注释掉行
btn[0],
btn[1],
并取消注释行
btns...
我收到错误消息
cannot use btns (type []*"fyne.io/fyne/v2/widget".Button) as type
[]fyne.CanvasObject in argument to container.NewVBox
所以,我的新手问题:
- 这是怎么回事,即为什么
btns...
不起作用?
- 我应该使用什么作为
NewVBox
的参数?
要在这里做您想做的事,您需要将 *widget.Button
的切片修改为 fyne.CanvasObject.
的切片
像这样扩展到可变参数时,类型必须与可变参数所期望的完全匹配。这意味着类型需要是接口本身,而不是实现接口的类型。
对于您的情况,以下方法将起作用:
btns := []fyne.CanvasObject{btn0, btn1}
vbox := container.NewVBox(btns...)
我正在尝试创建一个带有一系列按钮的 Fyne 垂直框,但无法弄清楚基本机制。我觉得这是一道围棋题,不是费恩题,围棋我不懂。
这是一个最小的程序来说明我的意思:
package main
import (
"fmt"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
a := app.New()
w := a.NewWindow("Button List")
btn0 := widget.NewButton("button 0", func() {
fmt.Println("Pressed 0")
})
btn1 := widget.NewButton("button 1", func() {
fmt.Println("Pressed 1")
})
btns := []*widget.Button{btn0, btn1}
vbox := container.NewVBox(
// does work
btns[0],
btns[1],
// doesn't work
// btns...,
)
w.SetContent(
vbox,
)
w.ShowAndRun()
}
我的理解是参数 btns...
应该产生与参数列表 btn[0], btn[1]
相同的效果,但它显然不会。如果我注释掉行
btn[0],
btn[1],
并取消注释行
btns...
我收到错误消息
cannot use btns (type []*"fyne.io/fyne/v2/widget".Button) as type []fyne.CanvasObject in argument to container.NewVBox
所以,我的新手问题:
- 这是怎么回事,即为什么
btns...
不起作用? - 我应该使用什么作为
NewVBox
的参数?
要在这里做您想做的事,您需要将 *widget.Button
的切片修改为 fyne.CanvasObject.
像这样扩展到可变参数时,类型必须与可变参数所期望的完全匹配。这意味着类型需要是接口本身,而不是实现接口的类型。
对于您的情况,以下方法将起作用:
btns := []fyne.CanvasObject{btn0, btn1}
vbox := container.NewVBox(btns...)