Fyne-Container
包container提供用于布局和组织应用程序的容器。 ```go import "fyne.io/fyne/v2/container" ``` ## 普通容器 ### 获取Container实例 使用New函数获取一个新的Container实例,其中包含指定的CanvasObjects,这些对象将根据指定的Layout进行布局。 ```go func New(layout fyne.Layout, objects ...fyne.CanvasObject) *fyne.Container ``` 还可以使用封装后的函数返回指定布局的容器。 | 函数名 | 作用 | | ------- | ---- | | NewGridWithColumns | 网格布局,指定列数 | | NewGridWithRows | 网格布局,指定行数 | | NewGridWrap | 网格布局,指定元素大小 | | NewHBox | 水平布局,元素从左往右排列 | | NewMax | 元素会尽可能的填满整个空间 | | NewPadded | 元素按照标准大小填入 | | NewVBox | 垂直布局,元素从上往下排列 | | NewWithoutLayout | 没有布局 | ## AppTabs 选项卡 ### 定义 ```go type AppTabs struct { widget.BaseWidget // 选项 Items []*TabItem // 已启用,使用下面那个函数替代 OnChanged func(*TabItem) // 选项被选时的函数 OnSelected func(*TabItem) // 选项未选时的函数 OnUnselected func(*TabItem) } ``` ### 示例 ```go 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("test") 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() } ``` ![](https://blog.coolcooltomato.com/uploads/article/demoContainer1.png) ## DocTabs 选项卡 与AppTabs类似,但实现了更多的操作,类似与浏览器的标签 ### 定义 ```go type DocTabs struct { widget.BaseWidget // 选项 Items []*TabItem // 选项函数 CreateTab func() *TabItem CloseIntercept func(*TabItem) OnClosed func(*TabItem) OnSelected func(*TabItem) OnUnselected func(*TabItem) } ``` ### 示例 ```go 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("test") 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() } ``` ![](https://blog.coolcooltomato.com/uploads/article/demoContainer2.png) ## Scroll 滚轮 ### 定义 ```go type Scroll = widget.Scroll ``` ### 示例 ```go 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("test") 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() } ``` ![](https://blog.coolcooltomato.com/uploads/article/demoContainer3.png) ## Split 分割线 ### 定义 ```go type Split struct { widget.BaseWidget // 偏移量 Offset float64 // 是否水平分割 Horizontal bool // 左右两边的元素 Leading fyne.CanvasObject Trailing fyne.CanvasObject } ``` ### 示例 ```go 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("test") 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() } ``` ![](https://blog.coolcooltomato.com/uploads/article/demoContainer4.png)
创建时间:2023-08-30
|
最后修改:2023-12-27
|
©允许规范转载
酷酷番茄
首页
文章
友链