我對 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 關注
- 187 瀏覽
添加回答
舉報
0/150
提交
取消