如何使用 Fyne 制作扩展和拉伸的布局框
How make expanded and stretched layout box with Fyne
我想要扩展和拉伸的框来布置小部件,以便我的应用程序看起来像这样:
即顶部和中间的盒子在两个方向上都很长。
我尝试将此代码与 Box 一起使用(因为我没有在 documentation 中找到任何 "free" 布局):
package main
import (
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/layout"
"fyne.io/fyne/widget"
)
func main() {
f := app.New()
w := f.NewWindow("")
label1 := widget.NewLabel("Label1")
b1 := widget.NewButton("Button1", func() {})
b2 := widget.NewButton("Button2", func() {})
label2 := widget.NewLabel("Label3")
w.SetContent(
fyne.NewContainerWithLayout(
layout.NewVBoxLayout(),
fyne.NewContainerWithLayout(layout.NewVBoxLayout(), label1),
fyne.NewContainerWithLayout(layout.NewHBoxLayout(), layout.NewSpacer(), b1, b2, layout.NewSpacer()),
label2),
)
w.ShowAndRun()
}
但这绝对不是一回事:
fyne 支持这样的布局吗?如何正确使用?
像这样?或者描述更多细节。
package main
import (
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/layout"
"fyne.io/fyne/widget"
)
func main() {
f := app.New()
w := f.NewWindow("")
label1 := widget.NewLabel("Label1")
b1 := widget.NewButton("Button1", func() {})
b2 := widget.NewButton("Button2", func() {})
label2 := widget.NewLabel("Label3")
w.SetContent(
fyne.NewContainerWithLayout(
layout.NewVBoxLayout(),
fyne.NewContainerWithLayout(layout.NewHBoxLayout(), layout.NewSpacer(), label1, layout.NewSpacer()),
layout.NewSpacer(),
fyne.NewContainerWithLayout(layout.NewHBoxLayout(), layout.NewSpacer(), b1, b2, layout.NewSpacer()),
layout.NewSpacer(),
fyne.NewContainerWithLayout(layout.NewHBoxLayout(), layout.NewSpacer(), label2, layout.NewSpacer()),
),
)
w.Resize(fyne.Size{Height: 320, Width: 480})
w.ShowAndRun()
}
编辑:已尝试 NewBorderLayout
但不确定这是否是您想要的。
拿到手后别忘了告诉我正确的做法哦。祝你好运!
package main
import (
"fmt"
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/layout"
"fyne.io/fyne/widget"
)
func main() {
f := app.New()
w := f.NewWindow("")
label1 := widget.NewLabel("Label1")
b1 := widget.NewButton("Button1", func() { fmt.Println("button1") })
b1.ExtendBaseWidget(b1)
b2 := widget.NewButton("Button2", func() { fmt.Println("button2") })
b2.ExtendBaseWidget(b2)
label2 := widget.NewLabel("Label3")
labox1 := fyne.NewContainerWithLayout(layout.NewGridLayoutWithRows(3),
fyne.NewContainerWithLayout(
layout.NewCenterLayout(),
label1,
))
labox2 := fyne.NewContainerWithLayout(layout.NewCenterLayout(), label2)
w.SetContent(
fyne.NewContainerWithLayout(
layout.NewBorderLayout(
labox1,
labox2,
nil,
nil,
),
labox1,
labox2,
fyne.NewContainerWithLayout(
layout.NewAdaptiveGridLayout(2),
b1,
b2,
),
),
)
w.Resize(fyne.Size{Height: 320, Width: 480})
w.ShowAndRun()
}
如果您想要扩展中心内容,我建议您使用 BorderLayout,Box 小部件旨在将项目打包而不是将它们展开。 VBox 将扩展宽度并使用元素的 minSize 作为它们的高度(以创建一个偶数列表),而 HBox 将扩展高度,同时保持项目的最小宽度(如按钮栏)。
为了打包整个应用程序UI,您更可能希望直接使用容器,例如fyne.NewContainerWithLayout(layout.NewBorderLayout(...), ...)
。
您可能会找到 Fyne Tour helpful, specifically BorderLayout.
的布局部分
我想要扩展和拉伸的框来布置小部件,以便我的应用程序看起来像这样:
即顶部和中间的盒子在两个方向上都很长。
我尝试将此代码与 Box 一起使用(因为我没有在 documentation 中找到任何 "free" 布局):
package main
import (
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/layout"
"fyne.io/fyne/widget"
)
func main() {
f := app.New()
w := f.NewWindow("")
label1 := widget.NewLabel("Label1")
b1 := widget.NewButton("Button1", func() {})
b2 := widget.NewButton("Button2", func() {})
label2 := widget.NewLabel("Label3")
w.SetContent(
fyne.NewContainerWithLayout(
layout.NewVBoxLayout(),
fyne.NewContainerWithLayout(layout.NewVBoxLayout(), label1),
fyne.NewContainerWithLayout(layout.NewHBoxLayout(), layout.NewSpacer(), b1, b2, layout.NewSpacer()),
label2),
)
w.ShowAndRun()
}
但这绝对不是一回事:
fyne 支持这样的布局吗?如何正确使用?
像这样?或者描述更多细节。
package main
import (
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/layout"
"fyne.io/fyne/widget"
)
func main() {
f := app.New()
w := f.NewWindow("")
label1 := widget.NewLabel("Label1")
b1 := widget.NewButton("Button1", func() {})
b2 := widget.NewButton("Button2", func() {})
label2 := widget.NewLabel("Label3")
w.SetContent(
fyne.NewContainerWithLayout(
layout.NewVBoxLayout(),
fyne.NewContainerWithLayout(layout.NewHBoxLayout(), layout.NewSpacer(), label1, layout.NewSpacer()),
layout.NewSpacer(),
fyne.NewContainerWithLayout(layout.NewHBoxLayout(), layout.NewSpacer(), b1, b2, layout.NewSpacer()),
layout.NewSpacer(),
fyne.NewContainerWithLayout(layout.NewHBoxLayout(), layout.NewSpacer(), label2, layout.NewSpacer()),
),
)
w.Resize(fyne.Size{Height: 320, Width: 480})
w.ShowAndRun()
}
编辑:已尝试 NewBorderLayout
但不确定这是否是您想要的。
拿到手后别忘了告诉我正确的做法哦。祝你好运!
package main
import (
"fmt"
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/layout"
"fyne.io/fyne/widget"
)
func main() {
f := app.New()
w := f.NewWindow("")
label1 := widget.NewLabel("Label1")
b1 := widget.NewButton("Button1", func() { fmt.Println("button1") })
b1.ExtendBaseWidget(b1)
b2 := widget.NewButton("Button2", func() { fmt.Println("button2") })
b2.ExtendBaseWidget(b2)
label2 := widget.NewLabel("Label3")
labox1 := fyne.NewContainerWithLayout(layout.NewGridLayoutWithRows(3),
fyne.NewContainerWithLayout(
layout.NewCenterLayout(),
label1,
))
labox2 := fyne.NewContainerWithLayout(layout.NewCenterLayout(), label2)
w.SetContent(
fyne.NewContainerWithLayout(
layout.NewBorderLayout(
labox1,
labox2,
nil,
nil,
),
labox1,
labox2,
fyne.NewContainerWithLayout(
layout.NewAdaptiveGridLayout(2),
b1,
b2,
),
),
)
w.Resize(fyne.Size{Height: 320, Width: 480})
w.ShowAndRun()
}
如果您想要扩展中心内容,我建议您使用 BorderLayout,Box 小部件旨在将项目打包而不是将它们展开。 VBox 将扩展宽度并使用元素的 minSize 作为它们的高度(以创建一个偶数列表),而 HBox 将扩展高度,同时保持项目的最小宽度(如按钮栏)。
为了打包整个应用程序UI,您更可能希望直接使用容器,例如fyne.NewContainerWithLayout(layout.NewBorderLayout(...), ...)
。
您可能会找到 Fyne Tour helpful, specifically BorderLayout.