英文:
Golang Fyne v2 custom entry widget can not overrule the FocusGained() function?
问题
我目前正在使用Golang Fyne V2框架进行工作。我想在我的输入小部件被点击/选中时调用一个自定义函数。我的方法是创建一个自定义输入小部件。
问题是我的自定义小部件没有覆盖以下函数:
func (e *Entry) Tapped(ev *fyne.PointEvent)
或者
func (e *Entry) FocusGained()
我的自定义输入字段基本上是这样的。我在Gui容器中看到了渲染的输入字段,所以很好。但是当我点击它时,“EXTRA FUNCTION CALL”没有被打印出来。
package gui
import (
"fmt"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/driver/desktop"
"fyne.io/fyne/v2/widget"
)
type InputField struct {
widget.BaseWidget
inputText *widget.Entry
customFunction func()
}
func NewInputField() *InputField {
i := &InputField{
BaseWidget: widget.BaseWidget{},
inputText: widget.NewEntry(),
}
i.inputText.Resize(i.MinSize())
i.customFunction = func() {
fmt.Println("EXTRA FUNCTION CALL")
}
i.ExtendBaseWidget(i)
return i
}
func (i *InputField) MinSize() fyne.Size {
return fyne.NewSize(600, 30)
}
func (i *InputField) Tapped(ev *fyne.PointEvent) {
fmt.Println("I have been tapped")
i.customFunction()
}
func (i *InputField) FocusGained() {
fmt.Println("I have been focussed")
i.customFunction()
}
func (i *InputField) FocusLost() {
fmt.Println("Focus lost")
}
func (i *InputField) MouseDown(m *desktop.MouseEvent) {
fmt.Println("MouseDown")
i.customFunction()
}
func (t *InputField) CreateRenderer() fyne.WidgetRenderer {
return NewBaseRenderer([]fyne.CanvasObject{t.inputText})
}
英文:
Im currently working in Golang Fyne V2 framework. I want to call a custom function when my entry widget has been clicked/selected. My approach was to make a custom entry widget.
https://developer.fyne.io/api/v2.0/widget/entry.html
Problem is that my custom widget is not overruling the following function:
func (e *Entry) Tapped(ev *fyne.PointEvent)
OR
func (e *Entry) FocusGained()
My custom input field looks basicly like this. I see the inputField rendered in a Gui container so thats great. But when I click on it the "EXTRA FUNCTION CALL" is not being printed.
package gui
import (
"fmt"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/driver/desktop"
"fyne.io/fyne/v2/widget"
)
type InputField struct {
widget.BaseWidget
inputText *widget.Entry
customFunction func()
}
func NewInputField() *InputField {
i := &InputField{
BaseWidget: widget.BaseWidget{},
inputText: widget.NewEntry(),
}
i.inputText.Resize(i.MinSize())
i.customFunction = func() {
fmt.Println("EXTRA FUNCTION CALL")
}
i.ExtendBaseWidget(i)
return i
}
func (i *InputField) MinSize() fyne.Size {
return fyne.NewSize(600, 30)
}
func (i *InputField) Tapped(ev *fyne.PointEvent) {
fmt.Println("I have been tapped")
i.customFunction()
}
func (i *InputField) FocusGained() {
fmt.Println("I have been focussed")
i.customFunction()
}
func (i *InputField) FocusLost() {
fmt.Println("Focus lost")
}
func (i *InputField) MouseDown(m *desktop.MouseEvent) {
fmt.Println("MouseDown")
i.customFunction()
}
func (t *InputField) CreateRenderer() fyne.WidgetRenderer {
return NewBaseRenderer([]fyne.CanvasObject{t.inputText})
}
答案1
得分: 1
不要扩展BaseWidget
和Entry
,直接扩展widget.Entry
。
通过这个改变,它应该按照你的期望工作。
英文:
Don’t extend BaseWidget
and Entry
, just extend widget.Entry
directly.
With that change it should work as you expect.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论