跳至主要內容

Fyne

程序员李某某大约 1 分钟

Fyne

环境准备

安装 Golang 环境

安装 C 编译环境

  • 下载安装 msys2open in new window

  • 在开始菜单打开 "MSYS2 MinGW 64-bit"

  • 执行如下命令(如果有询问选项全部选择all)

    pacman -Syu
    pacman -S mingw-w64-x86_64-toolchain
    
  • 配置环境变量xxxx\msys2\mingw64\bin

检查环境

检查工具open in new window

Hello Fyne

  • 创建项目

    go mod init testFyne
    go get fyne.io/fyne/v2
    
  • 测试代码

    package main
    
    import (
    	"fmt"
    	"fyne.io/fyne/v2/app"
    	"fyne.io/fyne/v2/widget"
    )
    
    func main() {
    	a := app.New()
    	w := a.NewWindow("茜茜编程工具箱")
    	w.SetContent(widget.NewLabel("这是一个Label"))
    	w.ShowAndRun()
    	fmt.Println("关闭窗口")
    }
    
  • 执行失败或者爆红:执行go mod tidy

  • w.ShowAndRun()等价于

    w.Show()
    a.Run()
    
    • a.run将开启事件循环(Eventloop)

    • 不能同时有两个事件循环, 这是因为事件循环负责处理所有的事件(如用户输入)并协调应用程序中的所有组件和窗口。如果你尝试在同一个应用程序中运行多个事件循环,会导致不一致的状态 只能有一个事件循环

    • a.Run()之后的代码直到程序退出才会被执行

    • 桌面运行时可以直接调用a.Quit()来直接退出程序(移动app不支持这项操作)

更新面板内容

func main() {
	a := app.New()
	w := a.NewWindow("茜茜编程工具箱")

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

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

	w.ShowAndRun()
	fmt.Println("关闭窗口")
}
// 更新
func updateTime(clock *widget.Label) {
	formatted := time.Now().Format("Time: 03:04:05")
	clock.SetText(formatted)
}

问题解决

package fyne.io/fyne/v2/cmd/fyne_demo
        imports fyne.io/fyne/v2/app
        imports fyne.io/fyne/v2/internal/driver/glfw
        imports fyne.io/fyne/v2/internal/driver/common
        imports fyne.io/fyne/v2/internal/painter/gl
        imports github.com/go-gl/gl/v2.1/gl: build constraints exclude all Go files in C:\Users\11594\go\pkg\mod\github.com\go-gl\gl@v0.0.0-20211210172815-726fda9656d6\v2.1\gl

解决:执行go env -w CGO_ENABLED=1

# runtime/cgo
cc1.exe: sorry, unimplemented: 64-bit mode not compiled in

换MSYS2安装吧

上次编辑于:
贡献者: 李元昊