使用fyne GUI框架,可以很容易地构建具有基本功能的简单GUI。我无法找到一种方法来检测用户按住按钮一段时间。我只能检测按钮是否被单击。这可能吗?
6jjcrrmo1#
是的。按钮控件不提供它,因为这不是按钮操作的一部分。然而,任何控件都可以扩展为侦听较低级别的鼠标(桌面)或触摸(移动的)事件。您可以在驱动程序/桌面/和驱动程序/移动的/包中找到接口。
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为我指明了正确的方向。
2条答案
按热度按时间6jjcrrmo1#
是的。按钮控件不提供它,因为这不是按钮操作的一部分。然而,任何控件都可以扩展为侦听较低级别的鼠标(桌面)或触摸(移动的)事件。您可以在驱动程序/桌面/和驱动程序/移动的/包中找到接口。
2guxujil2#
fyne中的小部件带有最可能使用的功能。当小部件不提供所需的功能时,可以扩展它。An example where an icon is made clickable can be seen here.在此示例中,接口fyne/v2.Tappable正在实现,其中还包含一个图标,该图标导致可单击的图标。
为了使按钮可保持,我们需要实现一个接口,它可以注册mousedown和mouseup事件。这个接口是fyne/v2/driver/desktop. Mouseable。
这就是它看起来的样子:
字符串
重要注意事项:Mouseable接口不按名称出现,驱动程序包只需要导入以引用desktop. MouseEvent。但与golang中的情况一样,该接口是通过创建MouseUp和MouseDown两个方法来实现的,即使您只“需要”一个,也需要两者都存在,否则这些都不起作用。
感谢andy.xyz为我指明了正确的方向。