我对 Go 和 Fyne 很陌生,对 C++、Python 和其他 OO 语言都太熟悉了。我试图为许多不同类型的 Fyne 小部件注入某些共同的行为,但我迷失了。例如,我需要在许多小部件(例如标签和按钮)上创建变体,以允许我捕获右键单击(TapSecondary),以便我可以执行一些特殊操作(通常是弹出一个菜单)。是的,我想要按钮和标签等内容上的弹出菜单;我什至想在输入框中拦截它(即使我必须以这种方式自己实现粘贴。)我在网上找到了一个例子,它提供了这个功能,可以让我拦截标签上的点击:type TapLabel struct { *widget.Label //composition //function pointers to set to get events OnTapped func() //`json:"-"` OnTappedSecondary func() //`json:"-"` (what are these for anyway?)}func NewTapLabelWithStyle(text string, alignment fyne.TextAlign, style fyne.TextStyle, tappedLeft func(), tappedRight func()) *TapLabel { return &TapLabel{ widget.NewLabelWithStyle(text, alignment, style), tappedLeft, tappedRight, }}//somehow this catches right click. How?func (mc *TapLabel) TappedSecondary(pe *fyne.PointEvent) { if mc.OnTappedSecondary != nil { mc.OnTappedSecondary() }}func (mc *TapLabel) Tapped(pe *fyne.PointEvent) { if mc.OnTapped != nil { mc.OnTapped() }}所以,它有效。我可以调用 NewTapLabelWithStyle 并向其传递 tappedLeft 和 tappedRight 的函数,当我单击标签时它们会被调用。问题是,如果我没有在网上找到该代码示例,我将永远不会知道或无法弄清楚 Label 允许您在组合结构中定义 TappedSecondary 和 Taped 并以这种方式捕获内容。我需要在各种小部件上捕获这些事件和其他事件,例如符文和钥匙。在哪里可以找到小部件悄悄支持但在https://godoc.org/中未提及的函数名称?我知道这与接口有关,因为代码示例提到,如果您没有为 Tapped 和 TappedSecondary 创建定义,即使您只想要一个,也不会起作用。某个地方有能力询问每个小部件支持哪些接口并相应地执行操作,但是该机制是在哪里定义的?(Go 让我怀念 C++,在 C++ 中,您可以定义一个 Widget 类,并为其提供所有可能的鼠标、按键等事件的虚拟钩子,然后您可以根据需要进行重写并执行操作,根据定义,这一切都是可见的。这看起来更加晦涩难懂。)
1 回答
MM们
TA贡献1886条经验 获得超2个赞
标签本身不支持点击 - 您正在添加的代码中添加该功能。任何实现 Tappable的小部件都将在点击事件时触发。通过实现类似的接口,小部件可以自由地处理 Fyne 理解的任何事件。
这不是 Label 的“隐藏功能”,但它肯定可以更好地记录下来。
- 1 回答
- 0 关注
- 119 浏览
添加回答
举报
0/150
提交
取消