亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓小部件承認它們真正可以處理哪些事件

如何讓小部件承認它們真正可以處理哪些事件

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 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號