gpt4 book ai didi

user-interface - 如何从 golang fyne 容器中删除对象

转载 作者:行者123 更新时间:2023-12-01 21:09:21 24 4
gpt4 key购买 nike

我正在开发需要动态添加和删除 gui 元素的 GUI 应用程序,我想知道是否有办法从 golang fyne 容器中删除元素。在下面的示例代码中,我创建了容器并动态添加元素,现在我希望也能够删除这些元素而不是隐藏它们。 (我尝试过的一个“解决方案”是创建新容器,填充它并重置窗口内容,但它闪烁,我不喜欢它)。

package main

import (
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/canvas"
"fyne.io/fyne/layout"
"fyne.io/fyne/widget"
"image/color"
"strconv"
"time"
)

type Input struct {
Id string
ThumbUrl string
}

func (input Input) GetContainer() *fyne.Container {
thumbImg := canvas.NewText("There", color.White)
group := widget.NewGroup(input.Id, thumbImg)
ret := fyne.NewContainerWithLayout(layout.NewVBoxLayout(), group)
return ret
}

type Segment struct {
Id string
Inputs []Input
InputsColumn *fyne.Container
}

func (seg *Segment) GetSegment() fyne.CanvasObject {
first := true
var inputsColumn *fyne.Container
for _, in := range seg.Inputs {
if first {
inputsColumn = fyne.NewContainerWithLayout(layout.NewGridLayout(1), in.GetContainer())
first = false
} else {
inputsColumn.AddObject(in.GetContainer())
}
}
seg.InputsColumn = inputsColumn

ret := fyne.NewContainerWithLayout(layout.NewHBoxLayout(), seg.InputsColumn)
return ret
}

func (seg *Segment) AddInput(input Input) {
seg.InputsColumn.AddObject(input.GetContainer())
}

var (
segment1 = Segment{
Id: "VSEG_1",
Inputs: []Input{
{
Id: "VIN_HDMI1",
ThumbUrl: "thumbIN.png",
},
{
Id: "VIN_SDI1",
ThumbUrl: "thumbIN.png",
},
{
Id: "VIN_SDVOE1",
ThumbUrl: "thumbIN.png",
},
},
}
)

func main() {
myApp := app.New()
myWindow := myApp.NewWindow("Container")
segmentLayout := segment1.GetSegment()
lay := fyne.NewContainerWithLayout(layout.NewHBoxLayout(), segmentLayout)

myWindow.SetContent(lay)
go changeContent(myWindow)
myWindow.ShowAndRun()
}

func changeContent(win fyne.Window) {
for i := 0; i < 3; i++ {
time.Sleep(time.Second * 2)
newInput := Input{
Id: "Added_ID_" + strconv.Itoa(i),
ThumbUrl: "thumbIN.png",
}
segment1.AddInput(newInput)
segment1.InputsColumn.Refresh()

}
for i := 0; i < 3; i++ {
time.Sleep(time.Second * 2)
// Remove the objects instead of hiding
segment1.InputsColumn.Objects[i].Hide()
segment1.InputsColumn.Refresh()
}
segment1.InputsColumn.Refresh()

}

最佳答案

fyne.Container您可以更改 Objects直接场。例如,您可以使用以下命令删除添加的第一项:

l1 := widget.NewLabel("first")
l2 := widget.NewLabel("second")
c := fyne.NewContainer(l1, l2)
log.Println(len(c.Objects)) // 2

c.Objects = c.Objects[:1]
c.Refresh() // ensures UI reflects the change
log.Println(len(c.Objects)) // 1

关于user-interface - 如何从 golang fyne 容器中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63995289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com