fyne 提示悬浮

package main

import (
	"fmt"
	"fyne.io/fyne/v2/driver/desktop"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/data/binding"
	"fyne.io/fyne/v2/widget"
)

func makeAlphabet() []string {
	var alphabet []string
	for ch := 'A'; ch <= 'Z'; ch++ {
		alphabet = append(alphabet, string(ch))
	}
	return alphabet
}

type TapLabel struct {
	*widget.Label // composition

	// function pointers to set to get events
	OnTapped func(string)

	menuItem *widget.PopUpMenu
}

func (mc *TapLabel) Tapped(pe *fyne.PointEvent) {
	if mc.OnTapped != nil {
		mc.OnTapped(mc.Text)
	}
}
func (li *TapLabel) MouseIn(event *desktop.MouseEvent) {
	if li.menuItem == nil {
		menuItem1 := fyne.NewMenuItem("11111111111111111111111111111111111111", nil)
		menu := fyne.NewMenu("File", menuItem1)
		popUpMenu := widget.NewPopUpMenu(menu, window.Canvas())
		li.menuItem = popUpMenu
	}
	li.menuItem.ShowAtPosition(event.AbsolutePosition)
	li.menuItem.Show()
	fmt.Println(event.Button)
	li.Refresh()
}

// MouseMoved is called when a desktop pointer hovers over the widget.
func (li *TapLabel) MouseMoved(*desktop.MouseEvent) {

}

// MouseOut is called when a desktop pointer exits the widget.
func (li *TapLabel) MouseOut() {
	if li.menuItem != nil {
		li.menuItem.Hide()
		li.Refresh()
	}
}

func NewTapLabel(text string, tappedLeft func(string)) *TapLabel {

	return &TapLabel{widget.NewLabel(text), tappedLeft, nil}
}

func alphabetToBrands(letter string) {
	fmt.Println(letter)
}

var window fyne.Window

func main() {
	app := app.New()
	window = app.NewWindow("tac_hub")
	window.Resize(fyne.NewSize(200, 200))

	rawData := makeAlphabet()
	data := binding.BindStringList(&rawData)
	list := widget.NewListWithData(
		data,
		func() fyne.CanvasObject {
			return NewTapLabel("template", alphabetToBrands)
		},
		func(i binding.DataItem, o fyne.CanvasObject) {
			o.(*TapLabel).Bind(i.(binding.String))
		},
	)
	list.OnSelected = func(id widget.ListItemID) {
		fmt.Println(id)
	}

	window.SetContent(list)
	window.ShowAndRun()
}

​​​​​​​

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值