Gox中使用fyne库进行GUI图形界面编程比较方便,唯一需要注意的是该库依赖于GLFW和OpenGL,有些虚拟机可能不支持,此时,Gox语言也支持使用Sciter库(请参见本系列有关文章),如何选择可以按自己所需考虑。

Gox中使用该库引用fyne包即可。

我们直接来看例子,实现一个简单计算器的代码如下:

// 创建一个fyne的applicaition对象
appT = fyne_app.New()

// 创建一个窗体对象,作为本程序的主窗体
windowT = appT.NewWindow("Calculator")

// 创建一个多行文本框
textAreaT = fyne_widget.NewMultiLineEntry()

// 设置该文本框的提示文字
textAreaT.SetPlaceHolder("1.2 * 3")

// 设置窗体中的内容,其中用到fyne.io/widget包中定义的各种控件,包括Label(标签)、VBox(纵向布局框)、HBox(横向布局框)、Button(按钮)
windowT.SetContent(fyne_widget.NewVBox(
    fyne_widget.NewLabel("Enter an expression."),
    textAreaT,
    fyne_widget.NewHBox(fyne_widget.NewButton("Calculate", func() {
        rs = eval(textAreaT.Text)

        println(rs)

        // 将计算结果数值设置回文本框中
        textAreaT.SetText(rs)
    }), fyne_widget.NewButton("Close", func() {
        appT.Quit() // 退出程序运行
    })),
))

// 在屏幕居中显示主窗体
windowT.CenterOnScreen()

// 运行界面
windowT.ShowAndRun()

执行的效果如下:

界面布局的代码很好理解,代码中也有详尽的注释,具体界面控件的文档和例子请参考Fyne的Github页面。

最后,注意图形界面编程的统一禁忌是:只能在一个线程中操作图形界面。

注意:

  • Gox语言是脱胎于Go语言(Golang)的开源脚本语言,解释执行,但相比Go语言更贴近高级语言,语法硬性限制也少一些;是一门偏向快速应用的语言,也可以说是一个集成工具;

  • Gox语言主要优势有三点:

    • 第一,Gox语言本身只有一个可执行文件,绿色免配置,下载即可使用,无需安装Go语言环境,无需编译,非常适合快速制作原型以及云服务器上的远程开发;
    • 第二,Gox中可以直接使用绝大多数Go语言标准库中的对象和方法函数,也内置了很多常用、优秀的第三方库,充分发挥Go语言多年积累的资源优势;
    • 第三,与很多其他主流语言不同,Gox语言着力解决了GUI图形界面编程的问题,内置了基于Fyne、Sciter的三套图形界面编程库,直接可以进行快捷高效的图形界面开发(Sciter只需下载一个动态链接库文件,执行和分发时附带上即可),特别适合编写演示原型系统。

作为脚本语言,Gox语言性能肯定不如Go语言这样的编译型语言快,但由于Gox语言与Go语言的紧密联系,Gox语言编写的脚本可以很容易的改写成Go语言代码,编译执行后就可以发挥Go语言的速度优势了。因此,Gox语言也比较适合做初期的Go语言调试,还有一个更直接的方式是使用Gotx(在Gox官网上也有下载),这是使用完全和Go语言一样语法的解释器,可以理解成集成了Go语言标准库和不少第三方库的解释执行的Go语言,一样也不需要搭建Go语言环境。Gotx与Gox的区别在于,Gotx仍然遵循Go语言的文法,代码相对复杂一些,限制也多一些,但改写回Go语言准备编译执行时,基本上没有成本。

Gox的官网在这里,也可以在浏览器搜索引擎中直接搜索“gox语言”,Github页面在这里,在这里可以看到很多Gox语言的学习指南和实际应用实例。