当前位置: 首页 > news >正文

【Go系列】Go的UI框架GIO

        其实主要我是要花一个折线图,但是使用Fyne貌似画不出来,使用plot也没法动态生成,听说Gio可以,那就先介绍一下什么是Gio把。

GIO(gioui.org)是一个用于Go语言的跨平台GUI库,旨在为开发人员提供构建现代图形用户界面的工具。以下是关于GIO的一些关键点:

设计哲学

  • 跨平台:GIO旨在支持多个操作系统,包括Linux、Windows、macOS、Android和iOS。
  • 性能:GIO注重性能,目标是提供流畅的用户界面。
  • 声明式API:GIO使用声明式API来构建用户界面,这有助于简化代码和维护。

核心特性

  • 图形和绘图:GIO提供了丰富的图形和绘图工具,允许开发者绘制自定义图形、形状和文本。
  • 用户界面组件:GIO提供了多种UI组件,如按钮、文本框、滑动条等,用于构建交互式界面。
  • 事件处理:GIO能够处理各种用户输入事件,如鼠标点击、键盘输入和触摸操作。
  • 布局:GIO支持灵活的布局管理,允许开发者创建自适应的界面设计。
  • 动画和过渡:GIO支持动画效果,可以用来增强用户界面的交互性和视觉吸引力。

如何使用GIO

  • 安装:使用Go的包管理器go get来安装GIO库。

    bash

    复制

    go get -u gioui.org/io@latest
    
  • 构建应用:GIO应用通常从创建一个窗口开始,然后定义UI组件和布局,最后处理事件循环。

这边需要注意,新版的GIO改了很多接口,需要Go1.22开始才能运行。

示例代码

package mainimport ("fmt""image/color""log""os""gioui.org/app""gioui.org/op""gioui.org/text""gioui.org/widget/material"
)func main() {go func() {window := new(app.Window)err := run(window)if err != nil {log.Fatal(err)}os.Exit(0)}()app.Main()
}func run(window *app.Window) error {theme := material.NewTheme()theme.Bg = color.NRGBA{R: 0, G: 0, B: 0, A: 255}var ops op.Opsfor {switch e := window.Event().(type) {case app.DestroyEvent:fmt.Println("destroy")return e.Errcase app.FrameEvent:// This graphics context is used for managing the rendering state.gtx := app.NewContext(&ops, e)title := material.H1(theme, "Hello, Gio")// Change the color of the label.maroon := color.NRGBA{R: 127, G: 0, B: 0, A: 255}title.Color = maroon// Change the position of the label.title.Alignment = text.Middle// Draw the label to the graphics context.title.Layout(gtx)// Pass the drawing operations to the GPU.e.Frame(gtx.Ops)}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot集成Tomcat、DispatcherServlet
  • 【监控软件】Zabbix
  • 【Langchain大语言模型开发教程】基于文档问答
  • 太原高校大学智能制造实验室数字孪生可视化系统平台建设项目验收
  • 基于区块链技术的高校教育资源共享的研究
  • Animate.css的使用
  • 视图,存储过程和触发器
  • 若依 ruoyi poi Excel合并行的导入
  • labview实现两台电脑共享变量传输及同步
  • 立创梁山派--移植开源的SFUD万能的串行 Flash 通用驱动库
  • 明星中药企业系列洞察(十二):百年老字号胡庆余堂如何借势焕新?
  • Go基础编程 - 10- 接口(interface)
  • 服务器选择租用还是托管?托管和租用哪个比较划算
  • 为RTEMS Raspberrypi4 BSP添加SPI支持
  • css快捷代码【超出一行文本显示省略号/超出三行显示省略号/超出n行...】
  • @angular/forms 源码解析之双向绑定
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Android开源项目规范总结
  • crontab执行失败的多种原因
  • django开发-定时任务的使用
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Electron入门介绍
  • IOS评论框不贴底(ios12新bug)
  • Javascript设计模式学习之Observer(观察者)模式
  • Linux下的乱码问题
  • Map集合、散列表、红黑树介绍
  • Sublime text 3 3103 注册码
  • Tornado学习笔记(1)
  • zookeeper系列(七)实战分布式命名服务
  • 从重复到重用
  • 基于axios的vue插件,让http请求更简单
  • 基于HAProxy的高性能缓存服务器nuster
  • 入手阿里云新服务器的部署NODE
  • 使用Gradle第一次构建Java程序
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 微服务框架lagom
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 用Visual Studio开发以太坊智能合约
  • elasticsearch-head插件安装
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​人工智能书单(数学基础篇)
  • # Redis 入门到精通(七)-- redis 删除策略
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (1)Android开发优化---------UI优化
  • (3)nginx 配置(nginx.conf)
  • (3)选择元素——(17)练习(Exercises)
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (Python第六天)文件处理
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (纯JS)图片裁剪
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (回溯) LeetCode 78. 子集