我正在尝试扩展 fyne 小部件以具有带背景的简单可点击内容。我搜索了 fyne 小部件以找到一个可以用作入门的示例,并在 List/ListItem 中找到了类似的东西。我基本上复制了列表项代码并稍微调整了一下。它看起来确实类似于fyne 文档中的简单示例。但是由于某些未知原因,go 给了我一个错误,我不知道原因是什么,也不知道如何解决:custom_widget/simple_card.go:80:24: c.card.super undefined (type *SimpleCard has no field or method super)这是模块的代码(custom_widget/simple_card.go):package custom_widgetimport ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" "log")// Declare conformity with interfaces.var _ fyne.Widget = (*SimpleCard)(nil)var _ fyne.Tappable = (*SimpleCard)(nil)type SimpleCard struct { widget.BaseWidget onTapped func() background *canvas.Rectangle content fyne.CanvasObject selected bool}func NewSimpleCard(content fyne.CanvasObject, tapped func()) *SimpleCard { card := &SimpleCard{onTapped: tapped, content: content} card.ExtendBaseWidget(card) return card}// CreateRenderer is a private method to Fyne which links this custom_widget to its renderer.func (c *SimpleCard) CreateRenderer() fyne.WidgetRenderer { c.ExtendBaseWidget(c) c.background = canvas.NewRectangle(theme.SelectionColor()) c.background.Hide() objects := []fyne.CanvasObject{c.background, c.content} // NewBaseRenderer and BaseRenderer are copied from // https://github.com/fyne-io/fyne/blob/master/internal/widget/base_renderer.go // because the functionality is marked internal in fyne !? return &SimpleCardRenderer{NewBaseRenderer(objects), c}}func (c *SimpleCard) Tapped(_ *fyne.PointEvent) { log.Println("I have been tapped") if c.onTapped != nil { c.selected = true c.Refresh() c.onTapped() }}// Declare conformity with the WidgetRenderer interface.var _ fyne.WidgetRenderer = (*SimpleCardRenderer)(nil)type SimpleCardRenderer struct { BaseRenderer card *SimpleCard}
1 回答

UYOU
TA贡献1878条经验 获得超4个赞
删除您创建的所有渲染器类型并在CreateRenderer
刚刚的 return中widget.NewSimpleRenderer(container .NewMax(c.background, c.content))
。它比你想象的要简单。
从主要小部件中复制代码通常不是最好的方法,因为我们有快捷方式和/或必须支持比您自己的小部件更多的功能。
- 1 回答
- 0 关注
- 107 浏览
添加回答
举报
0/150
提交
取消