Fyne是一个开源的Golang图形化界面库,通过它可以便捷的为桌面/移动及其它设备建立图形化应用。结合了Golang的强大和简洁,Fyne提供了一整套的组件库,通过它我们可以更方便的进行全平台开发并将你的应用部署至各个平台的应用商店。
1. 部件分类
根据类型划分, Fyne的组件分为以下几类:
- 基本组件(basics)
- 画布(Canvas)
- 布局(Layout)
- 容器(Container)
- 小组件(Widget)
- 数据包(Data binding)
举个例子:
标签
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
app := app.New()
w := app.NewWindow("Hello")
w.SetContent(widget.NewLabel("Hello Fyne!"))
w.ShowAndRun()
}
这个例子引用了fyne的app和widget包,在编译前要把依赖准备好,golang的包管理机制可以很方便的做这个事情:

完成之后执行目录下会生成go.mod文件,内容如下:
module fyne/1HelloFyne
go 1.17
require fyne.io/fyne/v2 v2.1.2
require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3 // indirect
github.com/fsnotify/fsnotify v1.4.9 // indirect
github.com/go-gl/gl v0.0.0-20210813123233-e4099ee2221f // indirect
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20211024062804-40e447a793be // indirect
github.com/godbus/dbus/v5 v5.0.4 // indirect
github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564 // indirect
github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9 // indirect
github.com/stretchr/testify v1.5.1 // indirect
github.com/yuin/goldmark v1.3.8 // indirect
golang.org/x/image v0.0.0-20200430140353-33d19683fad8 // indirect
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 // indirect
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
golang.org/x/text v0.3.3 // indirect
gopkg.in/yaml.v2 v2.2.8 // indirect
)
到这里依赖环境就准备好了,开始编译代码,使用终端进入代码目录,使用命令‘go build .’将代码编译为可执行文件,然后通过鼠标双击可执行文件或通过命令行‘./’命令运行应用最终执行效果如下:

注意:fyne用户界面可以通过App.Run() or Window.ShowAndRun()来启动显示,但是使用方面有以下限制:
1. 这两个接口的调用必须在main函数中执行。
2. Run()接口在一份代码中只能调用一次。
3. 桌面应用可以通过App.Quit()直接退出(移动应用暂不支持)。
4. 应用也可以通过关闭所有窗口来关闭。
5. Run()之后的代码,只有在程序退出的时候才会被执行。
本文介绍了Fyne,一个用于Golang的开源图形化界面库,旨在简化跨平台桌面和移动应用的开发。Fyne提供了包括基本组件、画布、布局、容器、小组件和数据绑定在内的丰富组件库。文章通过创建一个简单的标签应用为例,演示了如何使用Fyne进行GUI编程,包括设置依赖、编译和运行应用。
658

被折叠的 条评论
为什么被折叠?



