初体验Go的GUI框架
首先安装好Go和mingw编译器并配置完成
安装Fyne框架
1 2
| $ go mod init test $ go get fyne.io/fyne/v2
|
编写HelloWorld
main.go1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package main
import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" )
func main() { a := app.New() w := a.NewWindow("Go gogo") hello := widget.NewLabel("Hello Fyne!") w.SetContent(container.NewVBox( hello, widget.NewButton("Hi!", func() { hello.SetText("Welcome :)") }), )) w.Resize(fyne.NewSize(400, 200)) w.ShowAndRun() }
|
运行
1 2
| $ go mod tidy $ go run .
|
运行结果

初体验的后进阶测试
那么如何去实现日常使用程序中的点击按钮打开新窗口的操作呢?
如果你不是小白的话,通过上述例子已经能举一反三自己完成了。
注意到 widget.NewButton("Hi!", func() { hello.SetText("Welcome :)") }),
这个元素内的内容,里面定义了一个回调函数,因此我们可以在这里去实现相关操作。
main.go1 2 3 4 5 6 7 8 9
| w.SetContent(container.NewVBox( hello, widget.NewButton("Hi!", func() { - hello.SetText("Welcome :)") + wt := a.NewWindow("新窗口") + wt.SetContent(widget.NewLabel("这是新窗口的内容")) + wt.Show() }), ))
|
效果

进一步使用Fyne框架进行交互操作
main.go1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| package main
import ( "fmt" "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" )
func main() { a := app.New() w := a.NewWindow("Go gogo")
w.SetContent(container.NewVBox(makeUI()))
w.Resize(fyne.NewSize(400, 200)) w.ShowAndRun() }
func makeUI() (*widget.Label, *widget.Entry, *widget.Button, *widget.Label, *widget.Button) { output := widget.NewLabel("Hello World") entry := widget.NewEntry() btn := widget.NewButton("Click", func() { output.SetText(entry.Text) })
number := 0 count := widget.NewLabel(fmt.Sprintf("Current Number: %d", number)) incrementBtn := widget.NewButton("Add", func() { number++ count.SetText(fmt.Sprintf("Current Number: %d", number)) }) return output, entry, btn, count, incrementBtn }
|
container.NewVBox
接收组件和其指针,并将组件垂直的渲染出来
实现效果
