- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 listwithdata 小部件中显示字母表。我使用自定义可点击标签作为小部件显示在列表中。
出于某种原因,当小部件加载时,一切都显示正常。但是当我开始滚动时,字母开始以完全随机的顺序显示,我不明白为什么。
这是重现错误的完整工作代码。
package main
import (
"fmt"
"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)
}
func (mc *TapLabel) Tapped(pe *fyne.PointEvent) {
if mc.OnTapped != nil {
mc.OnTapped(mc.Text)
}
}
func NewTapLabel(text string, tappedLeft func(string)) *TapLabel {
return &TapLabel{widget.NewLabel(text), tappedLeft}
}
func alphabetToBrands(letter string) {
fmt.Println(letter)
}
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))
},
)
window.SetContent(list)
window.ShowAndRun()
}
点击 Action 正常工作并给我正确的字母(不是显示的字母而是应该显示的字母)。
我猜我一定是在某个地方做错了什么,但我不知道是什么。
如果有人能提供帮助,我们将不胜感激!
最佳答案
自定义小部件的解决方案:
这是基于 Fyne Extending Widgets tutorial .特别是你调用ExtendBaseWidget
:
ExtendBaseWidget is used by an extending widget to make use of BaseWidget functionality.
您仍然嵌入 widget.Label
,但不是作为指针(使用指针也可以,但文档使用非指针示例),以便将必要的方法提升到您的小部件中:
func NewTapLabel(text string, tappedLeft func(string)) *TapLabel {
label := &TapLabel{}
label.ExtendBaseWidget(label)
label.SetText(text)
label.OnTapped = tappedLeft
return label
}
然后您更改更新函数以将实际绑定(bind)字符串设置为标签,而不是像原始示例中那样再次绑定(bind)数据:
func(i binding.DataItem, o fyne.CanvasObject) {
s, _ := i.(binding.String).Get()
o.(*TapLabel).SetText(s)
},
至于为什么如果您省略调用 ExtendBaseWidget
会出现错误,我怀疑这是因为它缺少此方法设置的基本小部件实现。
没有自定义小部件的解决方案:
list := widget.NewListWithData(
data,
func() fyne.CanvasObject {
return &widget.Label{Text: "template"}
},
func(i binding.DataItem, o fyne.CanvasObject) {
o.(*widget.Label).Bind(i.(binding.String))
},
)
list.OnSelected = func(id widget.ListItemID) {
fmt.Println(rawData[id])
}
放弃自定义 TapLabel
以支持 &widget.Label{Text: "template"}
,然后使用 list.OnSelected< 打印点击的项目
并关闭数据 slice 。
关于go - Fyne 列表小部件无法正确显示项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69905449/
我还没有找到任何使用 fyne GUI 工具包创建启动画面的小部件。我在桌面驱动程序界面中找到了一种启动画面的方法,但不知道如何使用它? 谁能让我理解这一点,如何在 fyne GUI 中创建启动画面?
我正在尝试在 listwithdata 小部件中显示字母表。我使用自定义可点击标签作为小部件显示在列表中。 出于某种原因,当小部件加载时,一切都显示正常。但是当我开始滚动时,字母开始以完全随机的顺序显
刚开始研究 Go 和 Fyne。使用从示例中获得的信息编写测试 CRUD 程序后,我需要解决以下问题: 我需要一个初始对话框或类似的,以便允许选择现有记录或"new"来指示新记录。我现有的对话框不能充
(这里有很多新细节。) 我正在尝试(非常努力地)扩展 Fyne 的一些小部件的功能。基本上我需要实现或“覆盖”右键单击选择、按钮、编辑等内容。我还需要对其他一些行为进行细微更改。 我尝试以各种方式扩展
下面的代码创建了一个新的应用程序窗口来显示本地文件系统中的图片,我如何添加支持来检测“按键”事件并退出应用程序? package main import ( "flag" _ "ima
我可以使用 FYNE_THEME=light 运行我的 Fyne 应用程序以使其使用浅色背景,并且在没有此 var 的情况下运行它将默认为 dark。有没有办法扭转这种行为?让应用程序默认以浅色主题启
我可以使用 FYNE_THEME=light 运行我的 Fyne 应用程序以使其使用浅色背景,并且在没有此 var 的情况下运行它将默认为 dark。有没有办法扭转这种行为?让应用程序默认以浅色主题启
我只是无法配置 GUI fyne-io . go get fyne.io/fyne 出错了 package fyne.io/fyne: unrecognized import path "fyne.i
下面是我使用 fyne 工具包实现的 UI 的示例应用程序代码,但无法弄清楚如何将按钮向左对齐、使顶部文本变大以及添加颜色. 我尝试创建一个自定义主题来实现我需要的 UI 功能,但我对 fyne 工具
我想向我用 Go 编写的命令行应用程序添加 GUI,但我遇到了 fyne 和循环依赖项的问题。 考虑这个简单的例子来说明我面临的问题:假设一个按钮触发我的模型类上的一个耗时的方法(比如获取数据等),并
我想向我用 Go 编写的命令行应用程序添加 GUI,但我遇到了 fyne 和循环依赖项的问题。 考虑这个简单的例子来说明我面临的问题:假设一个按钮触发我的模型类上的一个耗时的方法(比如获取数据等),并
我想在一个自定义小部件中组合一些标准小部件。如果将所有小部件字段放入一个容器中,我可以这样做: package main import ( "fmt" "fyne.io/fyne"
我想要用于布局小部件的扩展和拉伸(stretch)框,以便我的应用程序如下所示: IE。顶部和中间的盒子在两个方向上都很长。 我尝试将此代码与 Box 一起使用(因为我没有在 documentatio
我正在开发需要动态添加和删除 gui 元素的 GUI 应用程序,我想知道是否有办法从 golang fyne 容器中删除元素。在下面的示例代码中,我创建了容器并动态添加元素,现在我希望也能够删除这些元
我有一个数据项集合,我正在尝试使用 Fyne 将一个 GUI 放在一起来编辑该集合。我已经想出如何使用绑定(bind)来显示集合,但我不知道如何才能编辑这些项目。 这是我所拥有的稍微简化的版本: ty
我正在检查使用 Web Assembly 在浏览器中使用 fyne 的可能性,但我收到错误... 主要Go: package main import ( "fyne.io/fyne/v2/ap
我正在检查使用 Web Assembly 在浏览器中使用 fyne 的可能性,但我收到错误... 主要Go: package main import ( "fyne.io/fyne/v2/ap
我无法从在 android 上运行的 Go fyne 应用程序发出 http 请求,下面是一个简单的例子来说明这个问题 package main import ( "io/ioutil"
这个问题更多是关于围棋而不是 Fyne。扩展 Fyne 的 Entry 小部件是规定的方式,我想检测何时按下 Enter(Return)并将其用作我需要对 Entry 内容采取行动的信号。我希望 Sh
单击按钮时更改应用页面上的元素的最佳做法是什么。比如我有这样的代码 package main import ( "fyne.io/fyne/v2/app" "fyne.io/fyne/
我是一名优秀的程序员,十分优秀!