微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何动态添加一列到 container.NewGridWithColumns()

如何解决如何动态添加一列到 container.NewGridWithColumns()

如何在 Go/Fyne 中向 container.NewGridWithColumns 添加额外的列?

我在 ColumnGrid 中呈现了许多项目(容器)。然后通过一个对话框我想添加一个项目。问题是我找不到扩展原始 ColumnGrid 的方法

我的代码

func main() {

    a := app.New()
    w = a.NewWindow("myApp")

    window = container.NewBorder(toolbar(),footer(),nil,content())

    w.SetContent(window)
    w.ShowAndRun()
}


func content() *fyne.Container {

    top := topRow()
    bottom := bottomrow()

    return container.NewGridWithRows(2,top,bottom)
}

var items []*fyne.Container

func bottomrow() *fyne.Container {

    items = nil

    db := sql.NewDB()
    list,err := db.List()
    if err != nil {
        //handle error
    }

    for _,l := range list {
        items = append(items,renderChart(l))
    }

    ct = container.NewGridWithColumns(len(items))

    for _,item := range items {
        ct.Add(item)
    }

    return ct
}

func dlgAdd() {

    entry := widget.NewEntry()
    entry.PlaceHolder = "name"
    e := container.NewGridWithRows(2,entry)

    d := dialog.NewCustomConfirm(
        "Add Item","Add","Cancel",e,func(v bool) {

            if !v {
                //Cancelled
                return
            }
            if entry.Text == "" {
                //without input 
                return
            }
            //write entry.Text to db
            db := sql.NewDB()
            err := db.AddItem(entry.Text)
            if err != nil {
                return
            }
            //report succes
            i := dialog.Newinformation("Succes",fmt.Sprintf("Item %s added",entry.Text),w)
            i.Show()
            i.SetonClosed(func() {

问题来了,如何在容器ct中多加一列 然后将对话框中的项目添加到新列 这行不通

                ct = container.NewGridWithColumns(len(ct.Objects) + 1)
                items = append(items,renderChart(entry.Text))

                for _,item := range items {
                    ct.Add(item)
                }

这也行不通

        bottomrow()

            w.Canvas().Refresh(window)
        })
    },w)
d.Show()

I am really stuck here.

解决方法

是的,[[ABC,12341,12.20,7.40,100.0,US],[DEF,11134.36,21.00,7.00,US]] 是解决方案,您只需要保存对 Container.Add 的引用而不是创建一个新的引用。 根据 Container 的不同,可能并不总是需要更改它,例如,如果项目数增加,Layout 将继续添加列(因为行数是固定的)。

,

我找到了解决方案:

ct.Add(newObject)
ct.Layout = (container.NewGridWithColumns(len(ct.Objects))).Layout
ct.Refresh()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。