我想在一个自定义小部件中组合一些标准小部件。如果将所有小部件字段放入一个容器中,我可以这样做:package mainimport ( "fmt" "fyne.io/fyne" "fyne.io/fyne/app" "fyne.io/fyne/layout" "fyne.io/fyne/widget")type MyWidget struct { widget.BaseWidget Cont *fyne.Container text *widget.Label statusBar *widget.Label b1 *widget.Button b2 *widget.Button count uint}func (t *MyWidget) Init() { t.b1 = widget.NewButton("1", func() { t.text.SetText("1") t.count++ t.statusBar.SetText(fmt.Sprint(t.count)) }) t.b2 = widget.NewButton("2", func() { t.text.SetText("2") }) t.statusBar = widget.NewLabel("status") bottom := fyne.NewContainerWithLayout(layout.NewCenterLayout(), t.statusBar) t.text = widget.NewLabelWithStyle("0", fyne.TextAlignTrailing, fyne.TextStyle{Bold: true}) t.Cont = fyne.NewContainerWithLayout(layout.NewBorderLayout(nil, bottom, nil, nil), bottom, fyne.NewContainerWithLayout( layout.NewGridLayoutWithRows(4), fyne.NewContainerWithLayout(layout.NewCenterLayout(), t.text), layout.NewSpacer(), fyne.NewContainerWithLayout(layout.NewGridLayout(2), t.b1, t.b2), layout.NewSpacer(), ))}func Load() *MyWidget { obj := &MyWidget{BaseWidget: widget.BaseWidget{}} obj.Init() return obj}func main() { f := app.New() w := f.NewWindow("") obj := Load() w.SetContent(obj.Cont) w.ShowAndRun()}我曾经使用 GUI 工具包,其中顶部小部件有机会设置容器以容纳子小部件。是否可以在没有导出内部容器的情况下使用 Fyne 获得解决方案?
1 回答

红糖糍粑
TA贡献1815条经验 获得超6个赞
我建议您改用容器。(即'fyne.NewContainerWithLayout(myLayout,widgets ...)'。
Fyne 中的小部件和容器是不同的。小部件是对逻辑的封装,带有渲染器来显示,容器用于对多个小部件进行分组。有一些小部件可以弥补差距,例如 widget.Box 和 widget.Group,但它们通常会公开一个容器,或者重新导出容器方法。
通常,您不会制作小部件树,而是制作带有小部件的容器树。
- 1 回答
- 0 关注
- 413 浏览
添加回答
举报
0/150
提交
取消