使用fyne给图形化go程序添加图标,同时使用go-winres生成exe带图标和版本信息

发布于 2024-07-17  120 次阅读


安装 fyne CLI

go install fyne.io/fyne/v2/cmd/fyne@latest

使用 fyne bundle 打包图标

fyne bundle -o bundled.go icon.png

确保在项目根目录中有一个 icon.png 文件,然后执行上述命令生成 bundled.go 文件。在生成的 bundled.go 文件中,资源会被定义为一个全局变量。可以直接在代码中引用这个变量来设置窗口图标。

示例窗口代码

package main
import (
	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/app"

)
func main() {
	myApp := app.New()
        // 使用打包的图标资源
        icon := resourceIconPng
        myWindow := myApp.NewWindow("程序名称")
	// 设置窗口图标
	myWindow.SetIcon(icon)

}

go-winres安装

go install github.com/tc-hib/go-winres@latest

打包exe

1、初始化go-winres

注意项目内必须有main.go文件

go-winres init

生成完毕项目内会出现winres文件夹结构如下。其中icon.pngicon16.png为图标文件、winres.json为配置信息。

2、winres.json信息解析(机翻)

{
  "RT_GROUP_ICON": {
    "APP": {
      "0000": [
        "icon.png",    // 图标文件
        "icon16.png"   // 图标文件
      ]
    }
  },
  "RT_MANIFEST": {
    "#1": {
      "0409": {
        "identity": {
          "name": "",          // 应用程序名称
          "version": ""        // 应用程序版本
        },
        "description": "",        // 应用程序描述
        "minimum-os": "win7",    // 最低操作系统要求,Windows 7
        "execution-level": "",   // 执行级别
        "ui-access": false,      // UI 访问权限
        "auto-elevate": false,   // 自动提升权限
        "dpi-awareness": "system", // DPI 感知级别
        "disable-theming": false,   // 禁用主题
        "disable-window-filtering": false, // 禁用窗口过滤
        "high-resolution-scrolling-aware": false, // 高分辨率滚动感知
        "ultra-high-resolution-scrolling-aware": false, // 超高分辨率滚动感知
        "long-path-aware": false, // 长路径感知
        "printer-driver-isolation": false, // 打印机驱动隔离
        "gdi-scaling": false, // GDI 缩放
        "segment-heap": false, // 段堆
        "use-common-controls-v6": false // 使用常见控件 v6
      }
    }
  },
  "RT_VERSION": {
    "#1": {
      "0000": {
        "fixed": {
          "file_version": "",    // 文件版本
          "product_version": ""  // 产品版本
        },
        "info": {
          "0409": {
            "Comments": "",             // 注释
            "CompanyName": "",  // 公司名称
            "FileDescription": "", // 文件描述
            "FileVersion": "",       // 文件版本
            "InternalName": "",         // 内部名称
            "LegalCopyright": "",  // 法律版权
            "LegalTrademarks": "",      // 法律商标
            "OriginalFilename": "",     // 原始文件名
            "PrivateBuild": "",      // 私有版本
            "ProductName": "", // 产品名称
            "ProductVersion": "",    // 产品版本
            "SpecialBuild": ""          // 特别版本
          }
        }
      }
    }
  }
}

3、构建打包文件

go-winres make

项目内应会出现两个后缀为syso的文件

4、打包命令

go build    //带有cmd黑框
go build -ldflags "-s -w -H=windowsgui"     //没有cmd黑框,适合有gui的