¿Cómo puedo agregar una columna adicional a un contenedor.NewGridWithColumns en Go/Fyne?
Tengo varios elementos (contenedores) representados en un ColumnGrid. Luego, a través de un cuadro de diálogo, quiero agregar un elemento. El problema es que no puedo encontrar una manera de extender el ColumnGrid original.
Mi código:
func main() {
a := app.New()
w = a.NewWindow("myApp")
window = container.NewBorder(toolbar(), footer(), nil, 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() {
Aquí está el problema, cómo agregar una columna adicional al contenedor ct
y luego agregue el elemento del cuadro de diálogo a la nueva columna
Esto no funcionará
ct = container.NewGridWithColumns(len(ct.Objects) + 1)
items = append(items, renderChart(entry.Text))
for _, item := range items {
ct.Add(item)
}
Esto tampoco funcionará
bottomRow()
w.Canvas().Refresh(window)
})
}, w)
d.Show()
I am really stuck here.
------------------------------------
Encontré la solución:
ct.Add(newObject)
ct.Layout = (container.NewGridWithColumns(len(ct.Objects))).Layout
ct.Refresh()
1
¡Gracias! Me ayudó. Pero yo uso: ct.Layout = layout.NewGridLayoutWithColumns(len(ct.Objects))
- vinser
18 de octubre de 2022 a las 5:04
------------------------------------
Sí, Container.Add es la solución, solo necesitaba guardar una referencia al contenedor en lugar de crear una nueva.
Dependiendo del diseño, puede que no siempre sea necesariopara cambiarlo, por ejemplo GridWithRows(...) seguirá agregando columnas si aumenta el número de elementos (porque el recuento de filas es fijo).