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

使用 OOP 风格的 fyne 小部件

使用 OOP 风格的 fyne 小部件

Go
一只甜甜圈 2023-08-21 14:29:05
我想将一些标准小部件合并到一个自定义小部件中。如果将所有小部件字段放入一个容器中,我就可以做到这一点,如下所示: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,但它们通常会公开容器,或重新导出容器方法。

通常,您不会创建一个小部件树,而是创建一个在循环中包含小部件的容器树。


查看完整回答
反对 回复 2023-08-21
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信