首页 > 编程语言 >GoLang图形用户界面编程实战(GUI编程)—fyne框架(三)

GoLang图形用户界面编程实战(GUI编程)—fyne框架(三)

时间:2023-06-24 21:31:38浏览次数:45  
标签:return GUI 编程 fyne v2 theme io go 图形用户界面

fyne中文乱码的两种解决方法

方法一(使用 embed ):

embed 是 Go1.16 新特性,以后会有专门的介绍。


1、拷贝字体到项目目录

项目根目录下新建resource目录,把字体文件拷贝到其中。

GoLang图形用户界面编程实战(GUI编程)—fyne框架(三)_根目录

2、在resource目录下新建 resource_export.go文件。

resource_export.go 代码:

package resource

import _ "embed"

//go:embed logo.png
var Logo []byte

//go:embed Deng.ttf
var DENGttf []byte

3、在根目录下 新建 main.go 和 theme.go

main.go代码

package main

import (
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/widget"
)

func main() {

	myApp := app.New()
	// 设置主题
	myApp.Settings().SetTheme(&MyTheme{})
	myWindow := myApp.NewWindow("边城lang仔")
	label := widget.NewLabel("边城lang仔 GoLang_CUI编程")
	myWindow.SetContent(label)
	myWindow.Show()
	myApp.Run()
}

theme.go代码:

package main

import (
    _ "embed"
    "fyne.io/fyne/v2"
    "fyne.io/fyne/v2/theme"
    "image/color"
    "win4/resource"
)

type MyTheme struct{}

var _ fyne.Theme = (*MyTheme)(nil)

func (m MyTheme) Font(s fyne.TextStyle) fyne.Resource {
    //return theme.DefaultTheme().Font(s)   
    return &fyne.StaticResource{
       StaticName:    "Deng.ttf",
       StaticContent: resource.DENGttf,
    }
}

func (*MyTheme) Color(n fyne.ThemeColorName, v fyne.ThemeVariant) color.Color {
    return theme.DefaultTheme().Color(n, v)
}

func (*MyTheme) Icon(n fyne.ThemeIconName) fyne.Resource {
    return theme.DefaultTheme().Icon(n)
}

func (*MyTheme) Size(n fyne.ThemeSizeName) float32 {
    return theme.DefaultTheme().Size(n)
}

4、结果

GoLang图形用户界面编程实战(GUI编程)—fyne框架(三)_bundle_02



方法二(用fyne命令打包字体文件,适合旧版本):

1、拷贝字体到项目目录

在字体目录(C:\Windows\Fonts)中,拷贝中文字体文件到项目根·目录中(只能用.ttffyne2.3版本使用.ttc字体文件会报错)。

GoLang图形用户界面编程实战(GUI编程)—fyne框架(三)_bundle_03

GoLang图形用户界面编程实战(GUI编程)—fyne框架(三)_bundle_04


2、安装 fyne CLI

GoLang图形用户界面编程实战(GUI编程)—fyne框架(三)_命令行工具_05

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


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

在终端中执行上面命令。安装完成后

fyne --version

可以查看fyne版本

fyne CLI 是fyne命令行接口工具。


3、使用 fyne CLI打包

在项目根目录下执行下列命令(使用windows命令行工具 ,win+R -cmd),生成bundled.go文件。

fyne bundle deng.ttf >> bundled.go
fyne bundle -append dengb.ttf >> bundled.go

GoLang图形用户界面编程实战(GUI编程)—fyne框架(三)_命令行工具_06

特别注意:上面的命令在windows命令行工具中执行,不能使用powershell,也不能在编辑器中的终端中执行(vscode 或 goland中都不可以)。因为生成后的bundled.go 应该是 utf-8格式。powershell会生成 utf-16的字符编码文件,导致编译失败。


4、创建主题theme.go

创建一个自己的theme (也就是重写theme)

package main

import (
	"image/color"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/theme"
)

type myTheme struct{}

var _ fyne.Theme = (*myTheme)(nil)

// return bundled font resource
func (*myTheme) Font(s fyne.TextStyle) fyne.Resource {
	if s.Monospace {
		return theme.DefaultTheme().Font(s)
	}
	if s.Bold {
		if s.Italic {
			return theme.DefaultTheme().Font(s)
		}
		return resourceDengbTtf
	}
	if s.Italic {
		return theme.DefaultTheme().Font(s)
	}
	return resourceDengTtf

}

func (*myTheme) Color(n fyne.ThemeColorName, v fyne.ThemeVariant) color.Color {
	return theme.DefaultTheme().Color(n, v)
}

func (*myTheme) Icon(n fyne.ThemeIconName) fyne.Resource {
	return theme.DefaultTheme().Icon(n)
}

func (*myTheme) Size(n fyne.ThemeSizeName) float32 {
	return theme.DefaultTheme().Size(n)
}

GoLang图形用户界面编程实战(GUI编程)—fyne框架(三)_根目录_07

Font方法中的两个返回值,到生成的bundled.go中可以找到。resourceDengTtf,resourceDengbTtf。

字体称变量设置一致后,字体文件可移除。theme.go 中resourceDengTtf名字会报红不必理会。


5、修改 main.go 代码,使用主题。

package mainimport (
    "fyne.io/fyne/v2/app"    "fyne.io/fyne/v2/widget")

func main() {

    myApp := app.New()
    // 设置主题
    myApp.Settings().SetTheme(&myTheme{})
    myWindow := myApp.NewWindow("边城lang仔")
    label := widget.NewLabel("边城lang仔 GoLang_CUI编程")

    myWindow.SetContent(label)

    myWindow.Show()
    myApp.Run()
}

6、运行结果

go run .\main.go .\theme.go .\bundled.go


GoLang图形用户界面编程实战(GUI编程)—fyne框架(三)_根目录_08




标签:return,GUI,编程,fyne,v2,theme,io,go,图形用户界面
From: https://blog.51cto.com/u_10948970/6541858

相关文章

  • 曲线艺术编程 coding curves 第十二章 超级椭圆与超级方程(Superellipses and Superfor
    第十三章超级椭圆与超级方程(SuperellipsesandSuperformulas)原作:KeithPetershttps://www.bit-101.com/blog/2022/11/coding-curves/译者:池中物王二狗(sheldon)源码:github:https://github.com/willian12345/coding-curves曲线艺术编程系列第十三章在这一章我们将讨论......
  • 【雕爷学编程】Arduino动手做(124)---24位WS2812环形灯板
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • python入门(十):面向对象编程
    Python面向对象编程指南原文|大纲|首页在Python中,面向对象编程(Object-OrientedProgramming,简称OOP)是一种重要的编程范式。它允许我们通过创建对象、定义类和实现继承等概念来组织和管理代码。了解Python的面向对象编程对于编写可维护、可扩展和可重用的代码至关重要。......
  • go编程基础--类型与变量
    引用:第3课:类型与变量?|课程列表|《Go编程基础(视频)》|Go技术论坛(learnku.com)1.go编排组织结构: 2.类型: rune表明用于unicode字符操作 3.默认值:值类型与引用类型 引用类型的默认值是nil ......
  • JAVA编程开发之 新蜂商城 --- 简介
    开源商城学习项目https://github.com/newbee-ltd/newbee-mallhttps://gitee.com/newbee-ltd/newbee-mallhttps://edu.csdn.net/course/detail/26258https://juejin.cn/book/6844733814074245133?suid=3808363978174302&source=pc新蜂商城虽然不能作为真实企业级项目,但是是优......
  • 初学编程100个代码
    Java、Python等主流编程语言如今火的不行,初学编程都有哪100个代码呢?笔者结合实际开发经验和同学们最迫切关注的技术热点,总结了100个常用的代码实现,具体如下:1.输出"Hello,World!":print("Hello,World!")2.求两个数的和:点击查看代码a=5b=7c=a+bpri......
  • 8. Java-AOP 面向切面编程
    专题使用汇总:Java-IDEAJava-Maven,依赖管理,私服https://www.cnblogs.com/chenshaojun2008/p/17493632.htmlJava-IOC&DIJava-Mybatis连接池,动态sqlhttps://www.cnblogs.com/chenshaojun2008/p/17496913.htmlJava-文件上传(本地和OSS)Java-登录校验JWT,过滤器,拦截器使用总结......
  • python: Treeview Control binding data using tkinter and ttkbootstrap GUI
     """StudentUI.py读文件类date2023-06-24edit:GeovinDu,geovindu,涂聚文ide:PyCharm2023.1python11"""importdatetimeimportsysimportosfromtkinterimportttkfromtkinterimport*fromtkinter.ttkimport*fromttk......
  • java编程开发之若依vue框架 --- 后台开发
    分页实现前端基于element封装的分页组件 pagination(opensnewwindow)后端基于mybatis的轻量级分页插件pageHelper(opensnewwindow)#前端调用实现1、前端定义分页流程  #后台逻辑实现@PostMapping("/list")//定义/list接口,用于查询出列表@ResponseBody//返......
  • java编程开发之若依vue --- 部署
      部署的大致步骤0.配置环境,jdk下载安装配置环境变量,Mysql下一步就好记住用户名和密码,Redis下载win版本运行即可,Maven下载配置环境变量修改本地库存放位置,Node下一步就好设置下淘宝的镜像源。JDK>=1.8(推荐1.8版本)Mysql>=5.7.0(推荐5.7版本)Redis>=3.0Maven>......