fyne容器和布局
fyne.Container
是fyne.CanvasObject
的一个实现。
package main
import (
"fyne.io/fyne/v2"
"image/color"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
)
func main() {
// 实例化fyne
myApp := app.New()
// 创建窗口
myWindow := myApp.NewWindow("golang-tech-stack.com")
// 绿色
green := color.NRGBA{R: 0, G: 180, B: 0, A: 255}
// 文本1
text1 := canvas.NewText("Hello", green)
// 文本2
text2 := canvas.NewText("There", green)
// 移动到 20,20 坐标
text2.Move(fyne.NewPos(20, 20))
// 没有布局
content := container.NewWithoutLayout(text1, text2)
myWindow.SetContent(content)
myWindow.ShowAndRun()
}
NewText()返回的是一个CanvasObject结构体。
NewWithoutLayout()返回一个fyne.Container,不带布局器。
使用布局器:
package main
import (
"fyne.io/fyne/v2/layout"
"image/color"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
)
func main() {
// 实例化fyne
myApp := app.New()
// 创建窗口
myWindow := myApp.NewWindow("golang-tech-stack.com")
// 绿色
green := color.NRGBA{R: 0, G: 180, B: 0, A: 255}
// 文本1
text1 := canvas.NewText("Hello", green)
// 文本2
text2 := canvas.NewText("There", green)
// 使用网格布局
content := container.New(layout.NewGridLayout(2), text1, text2)
myWindow.SetContent(content)
myWindow.ShowAndRun()
}
NewGridLayout()返回指定列数的网格布局,行数将取决于使用此布局的容器中有多少个子项。
NewGridLayout()返回fyne.Layout,是一个接口,有多种实现:gridLayout、formLayout等。
Layout定义了如何以指定的大小对CanvasObjects进行布局。
type Layout interface {
Layout([]CanvasObject, Size)
MinSize(objects []CanvasObject) Size
}