为了账号安全,请及时绑定邮箱和手机立即绑定

使用具有 OOP 风格的 fyne 小部件

使用具有 OOP 风格的 fyne 小部件

Go
肥皂起泡泡 2022-05-23 15:58:38
我想在一个自定义小部件中组合一些标准小部件。如果将所有小部件字段放入一个容器中,我可以这样做: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,但它们通常会公开一个容器,或者重新导出容器方法。

通常,您不会制作小部件树,而是制作带有小部件的容器树。


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 413 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号