在Golang fyne中按住按钮

f1tvaqid  于 2023-11-14  发布在  Go
关注(0)|答案(2)|浏览(142)

使用fyne GUI框架,可以很容易地构建具有基本功能的简单GUI。我无法找到一种方法来检测用户按住按钮一段时间。我只能检测按钮是否被单击。这可能吗?

6jjcrrmo

6jjcrrmo1#

是的。按钮控件不提供它,因为这不是按钮操作的一部分。然而,任何控件都可以扩展为侦听较低级别的鼠标(桌面)或触摸(移动的)事件。您可以在驱动程序/桌面/和驱动程序/移动的/包中找到接口。

2guxujil

2guxujil2#

fyne中的小部件带有最可能使用的功能。当小部件不提供所需的功能时,可以扩展它。An example where an icon is made clickable can be seen here.在此示例中,接口fyne/v2.Tappable正在实现,其中还包含一个图标,该图标导致可单击的图标。
为了使按钮可保持,我们需要实现一个接口,它可以注册mousedown和mouseup事件。这个接口是fyne/v2/driver/desktop. Mouseable。
这就是它看起来的样子:

package main
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/widget"
    "fyne.io/fyne/v2/driver/desktop"
    "log"
)

type holdableButton struct {
    widget.Button
}
func newHoldableButton(label string) *holdableButton {
    button := &holdableButton{}
    button.ExtendBaseWidget(button)
    button.Text=label
    return button
}

func (h *holdableButton) MouseDown(*desktop.MouseEvent){
    log.Println("down")
}
func (h *holdableButton) MouseUp(*desktop.MouseEvent){
    log.Println("up")
}

func main() {
    a := app.New()
    w := a.NewWindow("Holdable")
    w.SetContent(newHoldableButton("Button"))
    w.ShowAndRun()
}

字符串
重要注意事项:Mouseable接口不按名称出现,驱动程序包只需要导入以引用desktop. MouseEvent。但与golang中的情况一样,该接口是通过创建MouseUp和MouseDown两个方法来实现的,即使您只“需要”一个,也需要两者都存在,否则这些都不起作用。
感谢andy.xyz为我指明了正确的方向。

相关问题