包container提供用于布局和组织应用程序的容器。
import "fyne.io/fyne/v2/container"
使用New函数获取一个新的Container实例,其中包含指定的CanvasObjects,这些对象将根据指定的Layout进行布局。
func New(layout fyne.Layout, objects ...fyne.CanvasObject) *fyne.Container
还可以使用封装后的函数返回指定布局的容器。
函数名 | 作用 |
---|---|
NewGridWithColumns | 网格布局,指定列数 |
NewGridWithRows | 网格布局,指定行数 |
NewGridWrap | 网格布局,指定元素大小 |
NewHBox | 水平布局,元素从左往右排列 |
NewMax | 元素会尽可能的填满整个空间 |
NewPadded | 元素按照标准大小填入 |
NewVBox | 垂直布局,元素从上往下排列 |
NewWithoutLayout | 没有布局 |
type AppTabs struct {
widget.BaseWidget
// 选项
Items []*TabItem
// 已启用,使用下面那个函数替代
OnChanged func(*TabItem)
// 选项被选时的函数
OnSelected func(*TabItem)
// 选项未选时的函数
OnUnselected func(*TabItem)
}
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("TabContainer Widget")
l1 := widget.NewLabel("Hello")
l2 := widget.NewLabel("World!")
tabs := container.NewAppTabs(
container.NewTabItem("Tab 1", l1),
container.NewTabItem("Tab 2", l2),
)
// 改变选项卡位置(右边)
tabs.SetTabLocation(container.TabLocationTrailing)
Window.SetContent(tabs)
Window.ShowAndRun()
}
与AppTabs类似,但实现了更多的操作,类似与浏览器的标签
type DocTabs struct {
widget.BaseWidget
// 选项
Items []*TabItem
// 选项函数
CreateTab func() *TabItem
CloseIntercept func(*TabItem)
OnClosed func(*TabItem)
OnSelected func(*TabItem)
OnUnselected func(*TabItem)
}
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("TabContainer Widget")
l1 := widget.NewLabel("Hello")
l2 := widget.NewLabel("World!")
tabs := container.NewDocTabs(
container.NewTabItem("Tab 1", l1),
container.NewTabItem("Tab 2", l2),
)
Window.SetContent(tabs)
Window.ShowAndRun()
}
type Scroll = widget.Scroll
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
"image/color"
)
func main() {
App := app.New()
Window := App.NewWindow("TabContainer Widget")
box := container.NewVBox()
for i := 0; i < 20; i++ {
box.Add(canvas.NewText("hello", color.White))
}
scroll := container.NewScroll(box)
Window.SetContent(scroll)
Window.ShowAndRun()
}
type Split struct {
widget.BaseWidget
// 偏移量
Offset float64
// 是否水平分割
Horizontal bool
// 左右两边的元素
Leading fyne.CanvasObject
Trailing fyne.CanvasObject
}
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
App := app.New()
Window := App.NewWindow("TabContainer Widget")
l := container.NewVBox()
l.Add(widget.NewButton("left", func() {}))
r := container.NewVBox()
r.Add(widget.NewButton("right", func() {}))
s := container.NewHSplit(l, r)
Window.SetContent(s)
Window.ShowAndRun()
}