golang学习之go fyne GUI编程
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编程相关推荐
- Java学习之路12——GUI编程
组件:窗口.弹窗.面板.文本框.列表框.按钮.图片.监听事件.鼠标.键盘事件 一.简介 GUI的核心开发技术:Swing AWT. 弊端: 页面不美观 需要jre环境 学习的必要性 可以写出自己心中想 ...
- 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) ...
- 零基础入门学习Python(33)-图形用户界面编程(GUI编程)EasyGui
用户界面编程,即平时说的GUI(Graphical User Interface)编程,那些带有按钮.文本.输入框的窗口的编程 EasyGui是一个非常简单的GUI模块,一旦导入EasyGui模块,P ...
- Java基础学习总结(23)——GUI编程
2019独角兽企业重金招聘Python工程师标准>>> 一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Compo ...
- Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略
Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略 目录
- Python3 GUI编程: 自带图形库 tkinter 学习教程
1.为什么学tkinter tkinter的优缺点 优点:python3 GUI编程需要图形库,常用的有tkinter,wxWidgets,Qt,GTK等等.但是Python自带的库是仅仅只支持Tk的 ...
- c gui qt 4编程第二版_一本专门学习PyQt5 GUI编程的书
Python作为一个开源的解释型编程软件,在教学.科研.实际项目中用得越来越多.Python易学易用,程序资源丰富,在编程解决一些科学计算问题时比较实用,但是Python自带的Tkinter包设计GU ...
- python的messagebox的用法_Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解...
本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox.filedialog控件用法.分享给大家供大家参考,具体如下: 相关内容: messagebox 介绍 使用 fi ...
- Java GUI编程学习
Java GUI编程学习 GUI编程 告诉大家怎么学? 这是什么? 他怎么玩? 该如何平时运用它? 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1.简介 G ...
最新文章
- iBATIS第一部分基础
- 使用cnpm代替npm
- 常用LINQ关键字用法汇总
- jmeter时间函数格林尼治时间_VB常用函数——时间函数和DateDiff函数
- 基于华为云的Django网站部署
- 时分秒 java_JAVA 时分秒累加
- 【Elasticsearch】 Full text queries query_string 等 字符串查询
- ArduinoUNO实战-第八章-无源蜂鸣器
- zheng项目新建一个module学习学习
- win10文件名乱码但内容正常怎么办 win10文件名乱码怎么解决
- BP神经网络的简单应用
- 一条双字长的取数指令(LDA)存于存储器的100和101单元,其中第一个字为操作码和寻址特征M,第二个字为形式地址。
- “互联网+”下的数据化运营和技术架构
- 新版RTSP协议网络摄像头网页无插件直播平台EasyNVR如何自定义通道的背景音乐?
- 《ppt》word插入批注,修改作者
- 信息化与数字化的区别
- STM32F103+RFID-RC522模块 实现简单读卡写卡demo
- 观点丨企业需要一个什么样的独立云管平台?
- Java获取播放文件的时长
- 大气数据计算机系统的作用,《大气数据计算机系统》肖建德编.pdf