我想将一些标准小部件合并到一个自定义小部件中。如果将所有小部件字段放入一个容器中,我就可以做到这一点,如下所示: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 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
我建议您考虑使用容器。(即“fyne.NewContainerWithLayout(myLayout, widgets...)”。
Fyne 中的小部件和容器是不同的。Widget是对逻辑的封装,通过渲染器来显示,Container用于对多个Widget进行分组。有一些小部件可以弥补这一差距,例如 widget.Box 和 widget.Group,但它们通常会公开容器,或重新导出容器方法。
通常,您不会创建一个小部件树,而是创建一个在循环中包含小部件的容器树。
- 1 回答
- 0 关注
- 110 浏览
添加回答
举报
0/150
提交
取消