【问题标题】:Button action for a specific list item in FyneFyne 中特定列表项的按钮操作
【发布时间】:2022-10-07 05:39:43
【问题描述】:

我在 GUI 中有一个列表,其中有一个简单的字符串切片作为其数据源。对于每个列表项,我都会创建一个按钮,该按钮应该为该特定列表项执行某些操作。

这是一些示例代码:

var data = []string{\"folder1\", \"folder2\"}

...

func someListCreationMethod(data []string) *widget.List {
    return widget.NewList(
        func() int {
            return len(data)
        },
        func() fyne.CanvasObject {
            return container.NewPadded(
                widget.NewLabel(\"Will be replaced\"),
                widget.NewButton(\"Do Something\", nil),
            )
        },
        func(id widget.ListItemID, item fyne.CanvasObject) {
            item.(*fyne.Container).Objects[1].(*widget.Label).SetText(data[id])
        },

    )
}

如何将按钮连接到列表项?我需要一种方法来知道按下了哪个确切的按钮,或者按钮知道它位于哪个列表项上(或者哪个列表项是他的父项)。

有没有办法做到这一点?

也许widget.NewListWithData() 可以解决这个问题,但我不确定这在这种情况下是否有帮助。

编辑:这是一个更图形化的示例来显示这一点(此代码略有不同,但原理与上面的代码相同):

在这种情况下,我想为“pull”按钮所属的一个 repo 执行 pull。

    标签: go fyne


    【解决方案1】:

    您可以通过分配Button.OnTapped来设置按钮功能

    【讨论】:

    • 谢谢,但是如果我有一个包含 4 个项目的列表,我如何确保每个按钮都知道它被分配到哪个列表项,以便它执行的操作仅适用于一个列表项。我将尝试在问题的后面添加视觉解释。
    • 就像调用SetText 会显示正确的数据一样……将其传递给您为按钮设置的函数。喜欢b.OnTapped = func() { doSomething(id) }
    • 谢谢!这为我指明了正确的方向。
    【解决方案2】:

    归功于@andy.xyz,他为我指出了正确的方向。

    如果人们正在寻找解决方案,我只想提供一些示例代码。

    func someListCreationMethod(data []string) *widget.List {
        return widget.NewList(
            func() int {
                return len(data)
            },
            func() fyne.CanvasObject {
                return container.NewPadded(
                    widget.NewLabel("Will be replaced"),
                    widget.NewButton("Do Something", nil),
                )
            },
            func(id widget.ListItemID, item fyne.CanvasObject) {
                item.(*fyne.Container).Objects[0].(*widget.Label).SetText(data[id])
    
                // new part
                item.(*fyne.Container).Objects[1].(*widget.Button).OnTapped = func() {
                    fmt.Println("I am button " + data[id])
                }
            },
    
        )
    }
    

    【讨论】:

      【解决方案3】:

      你能帮我解决我如何为我拥有的每个单独按钮设置功能吗?所以它对我拥有的所有 3 个按钮都不一样

      所以家庭功能(无论如何) 应用程序功能(其他) 退出函数(退出)

      package main
      
      import (
          "fmt"
      
          "fyne.io/fyne/v2"
          "fyne.io/fyne/v2/app"
          "fyne.io/fyne/v2/container"
          "fyne.io/fyne/v2/theme"
          "fyne.io/fyne/v2/widget"
      )
      
      func main() {
          a := app.New()
          a.Settings().SetTheme(theme.DarkTheme())
          W := a.NewWindow("Application-OutSight")
          W.Resize(fyne.NewSize(640, 460))
      
          var menu = []string{"Home", "App-Status", "Exit"}
      
          contenttext := widget.NewLabel("Welcome to this App")
      
          split := (container.NewHSplit(
              menuBar(menu),
              container.NewMax(contenttext),
          ))
          split.Offset = 0.2
          W.SetContent(split)
          W.ShowAndRun()
      
      }
      
      func menuBar(data []string) *widget.List {
          return widget.NewList(
              func() int {
                  return len(data)
              },
              func() fyne.CanvasObject {
                  return container.NewPadded(
                      widget.NewLabel("Will be replaced"),
                      widget.NewButton("", nil),
                  )
              },
              func(id widget.ListItemID, o fyne.CanvasObject) {
                  o.(*fyne.Container).Objects[0].(*widget.Label).SetText(data[id])
      
                  // new part
                  o.(*fyne.Container).Objects[1].(*widget.Button).OnTapped = func() {
                      fmt.Println("I am button " + data[id])
                  }
              },
          )
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 2019-01-19
        • 1970-01-01
        • 1970-01-01
        • 2018-07-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多