为了账号安全,请及时绑定邮箱和手机立即绑定

如何让小部件承认它们真正可以处理哪些事件

如何让小部件承认它们真正可以处理哪些事件

Go
浮云间 2023-08-14 16:42:29
我对 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 的“隐藏功能”,但它肯定可以更好地记录下来。


查看完整回答
反对 回复 2023-08-14
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信