fyne 是 Go 语言编写的跨平台的 UI 库。
官方地址https://fyne.io/ 。
git地址https://github.com/fyne-io/fyne

go fyne GUI 编程

  • 一、fyne 项目搭建
    • 1、fyne初始化
    • 2、fyne依赖安装
    • 3、gcc安装
  • 二、Hello World
  • 三、fyne 时钟

一、fyne 项目搭建

1、fyne初始化

新建项目目录 fyne

go mod init fyne

2、fyne依赖安装

go get fyne.io/fyne/v2
go mod tidy

3、gcc安装

fyne包含c/c++代码需要gcc编译,下载TDM-GCC,安装成功后默认设置了环境变量。

二、Hello World

fyne默认没有中文字体,中文乱码。从系统目录C:\Windows\Fonts拷贝中文字体到fyne开发目录,并设置fyne字体 fyne_font。

package mainimport ("os""fyne.io/fyne/v2""fyne.io/fyne/v2/app""fyne.io/fyne/v2/widget"
)func main() {// 设置中文字体,不然中文乱码os.Setenv("FYNE_FONT", "msyhl.ttc")a := app.New()//创建一个窗口w := a.NewWindow("gui编程")//设置窗口内显示内容,需要中文字体w.SetContent(widget.NewLabel("go GUI 编程"))// 设置窗口大小w.Resize(fyne.NewSize(400, 400))// 窗口居中w.CenterOnScreen()//展示窗口 并运行程序w.ShowAndRun()
}

go run main.go

三、fyne 时钟

fyne 绘制图像界面时钟

package mainimport ("fmt""image/color""math""time""fyne.io/fyne/v2""fyne.io/fyne/v2/app""fyne.io/fyne/v2/canvas""fyne.io/fyne/v2/container"
)const (secondHandLenth float64 = 180.0minuteHandLenth float64 = 120.0hourHandLenth   float64 = 80.0
)func main() {clockApp := app.New()window := clockApp.NewWindow("时钟")window.SetPadded(false)yellow := color.RGBA{R: 0xff, G: 0xff, B: 0xcc, A: 0xff}circle := canvas.NewCircle(yellow)circle.StrokeWidth = 1circle.StrokeColor = color.Black// 圆所在正方形的左上角坐标circle.Position1.X = 0circle.Position1.Y = 0// 圆所在正方形的右下角坐标circle.Position2.X = 400circle.Position2.Y = 400layout := container.NewWithoutLayout(circle)// 刻度for i := 1; i <= 12; i++ {scale := canvas.NewText(fmt.Sprint(i), color.Black)scale.Alignment = fyne.TextAlignCentersize := scale.MinSize()// 根据字体大小计算刻度位置偏移量h := size.Height / 2//w := size.Width// 移动刻度至合适位置scale.Move(fyne.NewPos(getX(i*5, secondHandLenth), getY(i*5, secondHandLenth)-h))layout.Add(scale)}now := time.Now()second := now.Second()secondHand := drawPointer(second, secondHandLenth)layout.Add(secondHand)minute := now.Minute()minuteHand := drawPointer(minute, minuteHandLenth)layout.Add(minuteHand)hour := now.Hour() * 5hourHand := drawPointer(hour, hourHandLenth)layout.Add(hourHand)window.SetContent(layout)go func() {for {time.Sleep(1 * time.Second)now := time.Now()second := now.Second()secondHand.Position2.X = getX(second, secondHandLenth)secondHand.Position2.Y = getY(second, secondHandLenth)secondHand.Refresh()minute := now.Minute()minuteHand.Position2.X = getX(minute, minuteHandLenth)minuteHand.Position2.Y = getY(minute, minuteHandLenth)minuteHand.Refresh()hour := now.Hour() * 5hourHand.Position2.X = getX(hour, hourHandLenth)hourHand.Position2.Y = getY(hour, hourHandLenth)hourHand.Refresh()}}()window.Resize(fyne.NewSize(400, 400))window.CenterOnScreen()window.ShowAndRun()
}
// 绘制时钟指针
func drawPointer(second int, pointerLen float64) *canvas.Line {pointerHand := canvas.NewLine(color.Black)pointerHand.Position1.X = 200pointerHand.Position1.Y = 200pointerHand.Position2.X = getX(second, pointerLen)pointerHand.Position2.Y = getY(second, pointerLen)return pointerHand
}func getX(second int, pointerLen float64) float32 {return float32(200 + pointerLen*math.Cos(float64((math.Pi/float64(30))*float64(second)-(math.Pi/2))))
}func getY(second int, pointerLen float64) float32 {return float32(200 + pointerLen*math.Sin(float64((math.Pi/float64(30))*float64(second)-(math.Pi/2))))
}

运行结果如下图所示:

golang学习之go fyne GUI编程相关推荐

  1. Java学习之路12——GUI编程

    组件:窗口.弹窗.面板.文本框.列表框.按钮.图片.监听事件.鼠标.键盘事件 一.简介 GUI的核心开发技术:Swing AWT. 弊端: 页面不美观 需要jre环境 学习的必要性 可以写出自己心中想 ...

  2. python3 gui tk代码_【基础】学习笔记30-python3 tkinter GUI编程-实操12

    import tkinter as tk win = tk.Tk() menu = tk.Menu(win)  # 创建顶层菜单 filemenu = tk.Menu(menu, tearoff=0) ...

  3. 零基础入门学习Python(33)-图形用户界面编程(GUI编程)EasyGui

    用户界面编程,即平时说的GUI(Graphical User Interface)编程,那些带有按钮.文本.输入框的窗口的编程 EasyGui是一个非常简单的GUI模块,一旦导入EasyGui模块,P ...

  4. Java基础学习总结(23)——GUI编程

    2019独角兽企业重金招聘Python工程师标准>>> 一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Compo ...

  5. Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略

    Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略 目录

  6. Python3 GUI编程: 自带图形库 tkinter 学习教程

    1.为什么学tkinter tkinter的优缺点 优点:python3 GUI编程需要图形库,常用的有tkinter,wxWidgets,Qt,GTK等等.但是Python自带的库是仅仅只支持Tk的 ...

  7. c gui qt 4编程第二版_一本专门学习PyQt5 GUI编程的书

    Python作为一个开源的解释型编程软件,在教学.科研.实际项目中用得越来越多.Python易学易用,程序资源丰富,在编程解决一些科学计算问题时比较实用,但是Python自带的Tkinter包设计GU ...

  8. python的messagebox的用法_Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解...

    本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox.filedialog控件用法.分享给大家供大家参考,具体如下: 相关内容: messagebox 介绍 使用 fi ...

  9. Java GUI编程学习

    Java GUI编程学习 GUI编程 告诉大家怎么学? 这是什么? 他怎么玩? 该如何平时运用它? 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1.简介 G ...

最新文章

  1. iBATIS第一部分基础
  2. 使用cnpm代替npm
  3. 常用LINQ关键字用法汇总
  4. jmeter时间函数格林尼治时间_VB常用函数——时间函数和DateDiff函数
  5. 基于华为云的Django网站部署
  6. 时分秒 java_JAVA 时分秒累加
  7. 【Elasticsearch】 Full text queries query_string 等 字符串查询
  8. ArduinoUNO实战-第八章-无源蜂鸣器
  9. zheng项目新建一个module学习学习
  10. win10文件名乱码但内容正常怎么办 win10文件名乱码怎么解决
  11. BP神经网络的简单应用
  12. 一条双字长的取数指令(LDA)存于存储器的100和101单元,其中第一个字为操作码和寻址特征M,第二个字为形式地址。
  13. “互联网+”下的数据化运营和技术架构
  14. 新版RTSP协议网络摄像头网页无插件直播平台EasyNVR如何自定义通道的背景音乐?
  15. 《ppt》word插入批注,修改作者
  16. 信息化与数字化的区别
  17. STM32F103+RFID-RC522模块 实现简单读卡写卡demo
  18. 观点丨企业需要一个什么样的独立云管平台?
  19. Java获取播放文件的时长
  20. 大气数据计算机系统的作用,《大气数据计算机系统》肖建德编.pdf

热门文章

  1. VS2010未能加载 'VSTS for Database Professionals'包的解决办法
  2. 休闲游戏原来也能这么好玩…….
  3. ArcGIS教程:专题图精细化制作之透明图例
  4. 大批985,211,双非大学最近发布计算机考研调剂信息!
  5. PCI总线的桥与配置(二)
  6. 如何添加页面链接网址的图标
  7. AfxMessageBox()函数消息框按钮和图标
  8. javascript closure
  9. linux就该这么学:rhce考试经验分享
  10. 一切为了好玩(Just For Fun)