Fyne将更改参数传递给多个按钮



我在使用Fyne向按钮回调传递动态参数时遇到问题。我正在尝试创建一个按钮列表,当单击该列表时,它将调用一个具有特定字符串参数的函数:

clients := []fyne.CanvasObject{}
for _, uuidStr := range uuidStrs {
clientBtn := widget.NewButton(uuidStr, func() { server.selectClient(uuidStr))
clients = append(clients, clientBtn)
} 
clientsListed := container.New(layout.NewGridLayout(1), clients...)

问题是,单击所有按钮时,都将选择最后一个客户端,例如,它将调用server.selectClient(uuidStr),其中uuidStr始终为uuidStrs[len(uuidStrs)-1],但我希望每个按钮都传递一个唯一的uuidStr。所有按钮都显示正确的字符串,但不要在回调中传递正确的字符串。

单击时,我如何获得按钮来选择它显示的客户端?

这是由于Go如何在循环迭代中重新使用变量。你需要";捕获";值,以便按钮回调函数c获得正确的值。如下:

clients := []fyne.CanvasObject{}
for _, uuidStr := range uuidStrs {
uuid := uuidStr
clientBtn := widget.NewButton(uuidStr, func() { server.selectClient(uuid))
clients = append(clients, clientBtn)
} 
clientsListed := container.New(layout.NewGridLayout(1), clients...)

相关内容

  • 没有找到相关文章

最新更新