Skip to content
On this page

更新Content内容面板

在你的GUI上更新Content内容面板上的组件

当你完成了hello world 或者其他例子之后,你将会创建一个基础的用户接口,在这小节来看看一个GUI界面的Content面板是如何通过你的代码来更新的吧

第一步是申明一个变量去接收你想要更新的组件。在hello world程序中我们通过 widget.NewLabel 直接放到 SetContent(),为了更新这个组件,我们携程两行,例如:

go
clock := widget.NewLabel("")
	w.SetContent(clock)

一旦Content上的组件被一个我们申明的变量接受,我们可以调用函数像SetText("new text")这样。例如我们的案例,我们将Content面板上的label标签放上格式化后的当前时间,日期格式化借助了Time.Format

go
formatted := time.Now().Format("Time: 03:04:05")
	clock.SetText(formatted)

以上代码就是我们手动修改你所见内容的办法。然而我们还可以更进一步,定期更新内容。

在后台运行

大多数程序都有在后台运行程序的需求,例如下载数据或者是响应事件。为了模拟这种情况我们模拟以上更新代码为一秒执行一次

go
go func() {
		for range time.Tick(time.Second) {
			updateTime(clock)
		}
	}()

值得注意的是,你的代码应该放在ShowAndRun 或者 Run****之前,因为在程序退出之前,在它之后的代码块儿是不会执行的。满足以上情况,我们的代码会每秒更新一次用户交互界面,创建一个简单的时间组件,完成代码如下:

go
package main

import (
	"time"

	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/widget"
)

func updateTime(clock *widget.Label) {
	formatted := time.Now().Format("Time: 03:04:05")
	clock.SetText(formatted)
}

func main() {
	a := app.New()
	w := a.NewWindow("Clock")

	clock := widget.NewLabel("")
	updateTime(clock)

	w.SetContent(clock)
	go func() {
		for range time.Tick(time.Second) {
			updateTime(clock)
		}
	}()
	w.ShowAndRun()
}