首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >golang借助fyne库开发图形界面应用计算器

golang借助fyne库开发图形界面应用计算器

作者头像
程序那些事儿
发布2023-03-07 11:12:21
发布2023-03-07 11:12:21
3.7K00
代码可运行
举报
文章被收录于专栏:程序那些事儿程序那些事儿
运行总次数:0
代码可运行

虽然图形界面开发不是 golang 的强项,但是再开发一些小应用的时候,作为 golang 的开发者可以不用使用其他语言就能开发图形界面的感觉还是很不错的,下面我们就来介绍下如何使用 golang 开发一个计算器图形界面应用。

环境需求

golang 版本要求大于 1.14,需要安装 fyne 扩展包,需要 c 编译器,需要一些图形环境。

fyne

fyne 是一个由 golang 语言编写的一个 UI 图形库,它可以实现一套代码同时构建桌面应用和手机应用,目前它的最新版本已经来到了 2.2,并且添加了对 WASM 的支持。

fyne 程序的基本步骤

  1. 安装golang环境,还有fyne所有需要的环境,这里以ubuntu为例,sudo apt-get install golang gcc libgl1-mesa-dev xorg-dev.
  2. 初始化golang项目,go mod init.
  3. 安装fyne扩展包,go get fyne.io/fyne/v2
  4. 安装依赖,go mod tidy.
  5. 创建主文件,touch main.go.

fyne 页面布局

fyne创建的应用程序的大致架构如下,首先,可以通过widget组件进行元素的创建,比如button,label等元素,其中对于元素的事件响应通过回调函数进行处理,然后,设置一个跟新界面的循环函数,里面是对界面的更新操作,最后,是将元素通过container容器进行布局,元素放到容器里面,可以进行行列的设置。最后,不要忘记设置窗口启动运行就行。

代码

最终的代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
package main

import (
    "strconv"

    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/widget"
    "github.com/Knetic/govaluate"
)

func main() {
    myApp := app.New()
    myWindow := myApp.NewWindow("Calculator")

    mainResult := widget.NewLabel("")

    mainS := ""
    mainResult.SetText(mainS)

    one := widget.NewButton("1", func() {
        mainS += "1"
    })
    two := widget.NewButton("2", func() {
        mainS += "2"
    })
    three := widget.NewButton("3", func() {
        mainS += "3"
    })
    four := widget.NewButton("4", func() {
        mainS += "4"
    })
    five := widget.NewButton("5", func() {
        mainS += "5"
    })
    six := widget.NewButton("6", func() {
        mainS += "6"
    })
    seven := widget.NewButton("7", func() {
        mainS += "7"
    })
    eigth := widget.NewButton("8", func() {
        mainS += "8"
    })
    nine := widget.NewButton("9", func() {
        mainS += "9"
    })
    zero := widget.NewButton("0", func() {
        mainS += "0"
    })

    clear := widget.NewButton("C", func() {
        mainS = ""
    })

    plus := widget.NewButton("+", func() {
        mainS += "+"
    })

    minus := widget.NewButton("-", func() {
        mainS += "-"
    })

    multiply := widget.NewButton("*", func() {
        mainS += "*"
    })

    divide := widget.NewButton("/", func() {
        mainS += "/"
    })

    #fourth
    equal := widget.NewButton("=", func() {
        expression, err := govaluate.NewEvaluableExpression(mainS)
        if err == nil {
            result, err := expression.Evaluate(nil)
            if err == nil {
                mainS = strconv.FormatFloat(result.(float64), 'f', -1, 64)
            } else {
                mainS = err.Error()
            }
        } else {
            mainS = err.Error()
        }
    })

    #five updating it each time
    go func() {
        for {
            mainResult.SetText(mainS)
        }
    }()

    #creating layout from the given buttons
    myWindow.SetContent(container.NewVBox(
        mainResult,
        container.NewGridWithColumns(3,
            divide,
            multiply,
            minus,
            // plus,
        ),
        container.NewGridWithColumns(2,
            container.NewGridWithRows(3,
                container.NewGridWithColumns(3,
                    seven,
                    eigth,
                    nine,
                ),
                container.NewGridWithColumns(3,
                    four,
                    five,
                    six,
                ),
                container.NewGridWithColumns(3,
                    one,
                    two,
                    three,
                ),
            ),
            plus,
        ),
        container.NewGridWithColumns(2,
            container.NewGridWithColumns(2,
                clear,
                zero,
            ),
            equal,
        ),
    ),
    )
    myWindow.ShowAndRun()
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序那些事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境需求
  • fyne
  • fyne 程序的基本步骤
  • fyne 页面布局
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档