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

从 GUI 中的 for 循环分配适当的值

如何解决从 GUI 中的 for 循环分配适当的值

我一直在学习用于在 Go 中制作 GUI 的 Fyne 库,但遇到了一个问题。

func createResponses(content *fyne.Container){
for i:=0;i<address.childrenCount;i++{
    content.Add(widget.NewButton(address.children[i].text,func(){
        fmt.Println(i)
    }))
}}

这应该遍历节点的子节点,添加一个带有存储在该节点中的文本的按钮,然后在单击时将 i 创建时的值打印到控制台.然而,虽然按钮的文本,第一个参数 (address.children[i].text) 正确显示i 的值总是打印出与 3 相同的数字,导致要终止的循环。

起初我虽然这是 Fyne 的一个特定问题,或者我对如何使用 Go 的一般理解很差,但我记得我第一次学习 JavaFX 时遇到了类似的问题。是否有一些关于 GUI 的东西会导致这种行为的出现?更重要的是,处理这个问题的正确方法是什么?谢谢!

解决方法

这与在 for 循环中使用延迟函数有关。到代码执行时,i 变量将处于最后一个值。解决方案是在将值传递给回调之前“捕获”该值。

for i:=0;i<address.childrenCount;i++{
    index := i
    content.Add(widget.NewButton(address.children[i].text,func(){
        fmt.Println(index)
    }))
}

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