Golang Fyne GUI API教程:如何实现华氏温度转换器的回调/事件处理
Golang Fyne GUI API教程:如何实现华氏温度转换器的回调/事件处理 我想使用图形用户界面工具包 Fyne 创建一个摄氏度-华氏度转换器。 当在输入框中按下回车键时,我希望更改一个标签的文本,即把摄氏度转换为华氏度。 我该如何设置回调函数或处理输入框的回车事件? 更具体地说,就是为输入部件(entry widget)设置一个按下回车键时的事件处理器。
func main() {
fmt.Println("hello world")
}
2 回复
这是一个乘以3的转换器代码,应该使用“绑定”。
package main
import (
"strconv"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/data/binding"
"fyne.io/fyne/v2/widget"
)
func makeUI() fyne.CanvasObject {
estring := ""
myentrystring := binding.BindString(&estring)
mylabelstring := binding.NewString()
myentry := widget.NewEntryWithData(myentrystring)
mylabel := widget.NewLabelWithData(mylabelstring)
mybutton := widget.NewButton("Convert",
func() {
myinput, _ := strconv.Atoi(estring)
myinput = myinput * 3
myoutput := strconv.Itoa(myinput)
mylabelstring.Set(myoutput)
})
return container.NewVBox(myentry, mybutton, mylabel)
}
func main() {
a := app.New()
w := a.NewWindow("Widget Binding")
w.SetContent(makeUI())
w.ShowAndRun()
}
更多关于Golang Fyne GUI API教程:如何实现华氏温度转换器的回调/事件处理的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Fyne中处理输入框的回车事件,可以通过为*widget.Entry设置OnSubmitted回调函数来实现。当用户在输入框中按下回车键时,这个函数会被触发。
以下是一个完整的摄氏度-华氏度转换器示例:
package main
import (
"fmt"
"strconv"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
myApp := app.New()
myWindow := myApp.NewWindow("温度转换器")
// 创建输入框和标签
input := widget.NewEntry()
input.SetPlaceHolder("输入摄氏度")
resultLabel := widget.NewLabel("华氏度: ")
// 设置输入框的回车事件处理
input.OnSubmitted = func(text string) {
// 尝试将输入转换为浮点数
celsius, err := strconv.ParseFloat(text, 64)
if err != nil {
resultLabel.SetText("错误: 请输入有效的数字")
return
}
// 摄氏度转华氏度公式: F = C × 9/5 + 32
fahrenheit := celsius*9/5 + 32
resultLabel.SetText(fmt.Sprintf("华氏度: %.2f", fahrenheit))
}
// 创建界面布局
content := container.NewVBox(
widget.NewLabel("摄氏度转华氏度转换器"),
input,
resultLabel,
)
myWindow.SetContent(content)
myWindow.Resize(fyne.NewSize(300, 200))
myWindow.ShowAndRun()
}
如果你想要更精细地控制键盘事件,可以使用TypedKey事件处理器:
// 替代方案:使用TypedKey处理特定按键
input.OnTypedKey = func(key *fyne.KeyEvent) {
if key.Name == fyne.KeyReturn || key.Name == fyne.KeyEnter {
text := input.Text
celsius, err := strconv.ParseFloat(text, 64)
if err != nil {
resultLabel.SetText("错误: 请输入有效的数字")
return
}
fahrenheit := celsius*9/5 + 32
resultLabel.SetText(fmt.Sprintf("华氏度: %.2f", fahrenheit))
}
}
第一个示例使用OnSubmitted是更简洁的方式,因为它专门处理回车/提交事件。第二个示例展示了如何通过OnTypedKey处理特定的键盘按键,这在需要处理多个不同按键时更有用。

