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处理特定的键盘按键,这在需要处理多个不同按键时更有用。

回到顶部