省略扩展符NewVBox

  • 本文关键字:NewVBox 扩展 go fyne
  • 更新时间 :
  • 英文 :


我正在尝试创建一个带有一系列按钮的Fyne垂直框,但无法找出基本机制。我认为这是一个关于围棋的问题,而不是一个关于fne的问题,我不太了解围棋。

下面是一个最小的程序来说明我的意思:
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...

我得到错误信息

不能使用btns (type []*"fyne.io/fyne/v2/widget".Button)作为类型[] fyne。CanvasObject作为容器的参数。NewVBox

那么,我的新手问题:

  • 这里发生了什么,即,为什么btns...不起作用?
  • 我应该用什么作为NewVBox的参数?

要做你想做的事情,你需要修改*widget.Button的切片为fyne.CanvasObject的切片。

在像这样展开到可变形参中时,类型必须与可变形参所期望的完全匹配。这意味着类型必须是接口本身,而不是实现接口的类型。

在你的例子中,可以这样做:

btns := []fyne.CanvasObject{btn0, btn1}
vbox := container.NewVBox(btns...)

相关内容

  • 没有找到相关文章

最新更新