clq
浏览(561) -
2023-04-23 10:25:14 发表
编辑
关键字:
[2023-04-25 19:22:43 最后更新]
原来是要先安装一个命令行工具 ...
https://blog.csdn.net/qq_40790680/article/details/128971365
https://github.com/gioui/gio
https://www.nuomiphp.com/t/633ee542f0e4d477e61db592.html
https://gioui.org/
----
意外发现打包成 macos 有可能无法退出,仔细测试后发现是 xcode 生成的 Info.plist 中有默认的这个键值引起的。
|key| NSPrincipalClass
|string|NSApplication
查了一下资料,这个指的是启动的主类,因为 fyne 和 govcl 都不是 xcode 开发的,所以自然是没有的了。
----------------------------------------------------------------
fyne 应用打包
于 2022-11-14 03:25:53 发布 128
fyne应用打包,可以使用fyne package命令,必须首先安装fyne命令行工具
go install fyne.io/fyne/v2/cmd/fyne@latest
打包
PC端
fyne package -os darwin -icon myapp.png # 打包成macos系统下的可执行文件
fyne package -os linux -icon myapp.png # 打包成linux系统下的可执行文件
fyne package -os windows -icon myapp.png # 打包成windows系统下的可执行文件
这里需要准备一个myapp.png文件,该文件是应用快捷方式的图标。
移动端
备注:此部分代码转自官方库,但未进行亲自测试(还没用fyne写过app)
fyne package -os android -appID my.domain.appname
fyne install -os android
构建的 Android 应用程序可以在真实设备或 Android 模拟器中运行。但是,为 iOS 构建略有不同。如果“-os”参数是“ios”,它只为真正的 iOS 设备构建。将“-os”指定为“iossimulator”允许应用程序能够在 iOS 模拟器中运行:
fyne package -os ios -appID my.domain.appname
fyne package -os iossimulator -appID my.domain.appname
clq
2023-04-23 10:33:27 发表
编辑
http://www.guoxiaolong.cn/blog/?id=9717
----------------------------------------------------------------
Fyne – Go语言的跨平台UI工具包
分类: golang编程 | 浏览: 1221
各主流的编程语言都有其特有的 UI 库,Go 语言也不甘落后。如果你不习惯用 Dart 或 Javascript 来开发跨平台的 GUI 应用,不妨来看看 Fyne,这个背靠强大易用的Go语言的UI工具库,兼具性能和开发效率,在桌面和移动端都能构建用户友好的应用。
Go语言UI库
简介
Fyne 是 fyne-io 组织在 Github 上开源的 Go 语言 UI 工具包,项目位于 ,目前版本为 v1.3.2。
Fyne 提供了简单的方式来开发美观、轻量和用户友好的原生应用,拥有大量性能高且方便使用的控件和布局。Fyne 专注于设计和可用性,控件能够充分满足用户对于交互的期待,并为开发者提供清晰的功能和接口。Fyne 易于安装,无须为各种复杂的依赖烦恼。而 Go 语言作为一个日渐流行的服务端语言,其较低的学习门槛和优秀的性能,使得 Fyne 具有更大的推广空间。目前,Fyne 已经拥有大量的使用案例,广受欢迎。
Fyne库 – 为桌面和移动端构建美观应用
安装
Fyne 使用 Go 语言开发,需要 Go 1.12 或以上,使用 go get 安装:
go get fyne.io/fyne
同时,你还需要一个 C语言编译器来编译平台相关的图形驱动。对于 Windows 平台,Cygwin、TDM-GCC 和 MSYS2(MingW-w64)都可以使用。在 Linux 平台,则需安装对应平台的图形驱动,如在 Ubuntu / Debian 中可以使用命令
sudo apt-get install golang gcc libgl1-mesa-dev xorg-dev
想要开发 Android 应用,则需要安装 Android SDK 和 Android NDK。而想要挨罚 macOS 或 iOS 应用,则需要 Xcode 进行开发。
示例
Fyne 提供了使用函数。或是使用 结构体 这两套不同的接口风格,可以根据个人的编码喜好选择。我们来看 Fyne 的 Hello World 例子:
package main
import (
"fyne.io/fyne/app"
"fyne.io/fyne/widget"
)
func main() {
a := app.New()
w := a.NewWindow("Hello")
hello := widget.NewLabel("Hello Fyne!")
w.SetContent(widget.NewVBox(
hello,
widget.NewButton("Hi!", func() {
hello.SetText(" Welcome :)")
}),
))
w.ShowAndRun()
}
代码十分简洁明了。首先,通过 app.New() 创建一个应用实例,并新建一个标题为 Hello 的窗口。然后,使用 widget.NewLabel 来创建一个便签,并在窗口设置 垂直方向排列的vbox 布局,首先放置标签,然后再放置一个新建的按钮。按钮注册了一个点击事件的回调函数,在点击按钮时会把标签的文本更改为 Welcome。最后,运行并显示窗口。
直接运行代码:
go run hello.go
就会出现一个新的窗口,并显示带有一个标签和一个按钮的界面:
Fyne的Hello例子
默认的主题是暗色调风格的,如果想要配置为明亮色调的主题,可以设置环境变量
FYNE_THEME=light
就能得到一个明亮色调主题的界面:
Fyne明亮色调例子
在上面的代码中,我们可以看到,控件的创建都是使用 New 之类的函数实现。Fyne 也提供了使用结构体的方式进行控件的创建,
package main
import (
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/widget"
)
func main() {
a := app.New()
w := a.NewWindow("Hello")
w.SetContent(&widget.Box{Children: []fyne. canvas Object{
&widget.Label{Text: "Hello Fyne!"},
&widget.Button{Text: "Quit", OnTapped: func() {
a.Quit()
}},
}})
w.ShowAndRun()
}
在一些情况下,结构体方式的风格可能更为清晰,可自行选择。
Fyne 控件丰富,包括基本的按钮、输入框、表单、图标、进度条、选择框等。
package main
import (
"log"
"fyne.io/fyne/app"
"fyne.io/fyne/widget"
)
func main() {
myApp := app.New()
myWindow := myApp.NewWindow("Form Widget")
entry := widget.NewEntry()
textArea := widget.NewMultiLineEntry()
form := &widget.Form{
Items: []*widget.FormItem{
{"Entry", entry}},
OnSubmit: func() {
log.Println("Form submitted:", entry.Text)
log.Println("multiline:", textArea.Text)
myWindow.Close()
},
}
form.Append("Text", textArea)
myWindow.SetContent(form)
myWindow.ShowAndRun()
}
Fyne表单
Fyne 使用布局来控制控件的排列方式,包括 HBox(水平方向单行排列)、VBox(垂直方向单列排列)、Center(居中)、Grid(网格)、GridWrap(自适应的网格)、Border(各边外的剩余空间)和 Max(最大填充)。
Grid布局
Fyne 的窗口控制十分方便,充分利用了 Go 语言的协程特性,完成了窗口的异步渲染和控制:
package main
import (
"time"
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/widget"
)
func main() {
myApp := app.New()
myWindow := myApp.NewWindow("Hello")
myWindow.SetContent(widget.NewLabel("Hello"))
go showAnother(myApp)
myWindow.ShowAndRun()
}
func showAnother(a fyne.App) {
time.Sleep(time.Second * 5)
win := a.NewWindow("Shown later")
win.SetContent(widget.NewLabel("5 seconds later"))
win.Resize(fyne.NewSize(200, 200))
win.Show()
time.Sleep(time.Second * 2)
win.Hide()
}
在本例中,我们在一个窗口中新建了另一个窗口并进行渲染显示,同时展示了包括控制大小、隐藏关闭等功能。
Fyne 还支持画布功能,可以在画布上进行自由渲染,实现更为复杂的图形应用:
package main
import (
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/ Canvas "
"fyne.io/fyne/theme"
"image/color"
"time"
)
func main() {
myApp := app.New()
myWindow := myApp.NewWindow("Canvas")
myCanvas := myWindow.Canvas()
text := canvas.NewText("Text", color.White)
text.TextStyle.Bold = true
myCanvas.SetContent(text)
go changeContent(myCanvas)
myWindow.Resize(fyne.NewSize(100, 100))
myWindow.ShowAndRun()
}
func changeContent(c fyne.Canvas) {
time.Sleep(time.Second * 2)
c.SetContent(canvas.NewRectangle(color.Black))
time.Sleep(time.Second * 2)
c.SetContent(canvas.NewLine(color.Gray{0x66}))
time.Sleep(time.Second * 2)
circle := canvas.NewCircle(color.White)
circle.StrokeWidth = 4
circle.StrokeColor = color.RGBA{0xff, 0x33, 0x33, 0xff}
c.SetContent(circle)
time.Sleep(time.Second * 2)
c.SetContent(canvas.NewImageFromResource(theme.FyneLogo()))
}
Fyne应用例子
更多
Fyne 的打包构建十分简单,安装 Fyne 配套的命令行工具
go get fyne.io/fyne/cmd/fyne
对应桌面端的应用,在确定好目标平台后就可以直接打包:
fyne package -os darwin -icon myapp.png
fyne package -os linux -icon myapp.png
fyne package -os windows -icon myapp.png
上述命令分别对应 macOS、Linux 和 Windows平台的构建,而 myapp.png 是应用的图标文件。对于 macOS 平台,生成 app 应用文件;对于 Linux 平台,生成一个 tag.gz 文件,解包后可以放到 use/local/ 中使用;对于 Windows 平台,直接生成 exe 文件,可以直接运行。
而对于移动端平台,同样十分简单。在配置好了相应的环境后,运行
fyne package -os android -appID com.example.myapp -icon mobileIcon.png
fyne package -os ios - appID com.example.myapp -icon mobileIcon.png
则可以分别构建出 Android 平台的 apk 文件和 iOS 平台的 app 文件。
Fyne特性
总结
Fyne 作为一个 UI 工具包,依靠 Go 语言的优秀性能,尤其是 goroutine 协程的异步特性,实现了高性能、易开发的图形界面应用。Fyne 的使用和设计十分现代化,通过简单的命令行就能实现跨平台的开发和构建,安装方便,平台兼容性好。
Fyne 并未基于现有的 UI 库进行开发,而是直接使用不同平台的图形驱动实现,完成了对跨平台 UI 的抽象,底层代码值得研究。同时,Fyne 仍处于活跃开发阶段,不少功能仍待实现,有兴趣的开发者可持续关注项目。
本帖子属于以下条目()
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.