Gox语言中进行GUI图形界面和命令行混合编程-GX26

与大多数其他语言不同,在Gox语言中,是可以混合使用命令行方式的界面和GUI图形界面的,也就是说,可以在需要的时候再调用图形界面,而简单的操作可以用命令行方式完成。

我们来看看一个具体的例子,下面这段代码的作用是将一个16进制的数字转换为10进制数字,我们的设计是:如果运行该脚本时带有命令行参数表示需要转换的16进制数字,那么程序将直接输出转换的结果并退出;否则程序将启动图形界面等待用户输入16进制数字。

argsG = tk.GetAllParameters(os.Args)

lenT = len(argsG)

printfln("args length: %v", lenT)

if lenT > 2 {
    pl("Try to convert %v", argsG[2])

    numT = tk.HexToInt(argsG[2])

    pl("Result: %v", numT)

    return
}

errT = lcl.InitLCL()

if errT != nil {
    plerr(errT)
    exit()
}

application = lcl.GetApplication()

application.Initialize()

application.SetTitle("Hex to Integer converter")
application.SetMainFormOnTaskBar(true)

mainForm = application.CreateForm()

mainForm.SetWidth(400)
mainForm.SetHeight(200)
mainForm.SetCaption("Hex to Integer converter")
mainForm.SetPosition(lcl.PoScreenCenter)

mainForm.Font().SetSize(11)

label1 = lcl.NewLabel(mainForm)
label1.SetParent(mainForm)
label1.SetLeft(10)
label1.SetTop(10)
label1.Font().SetName("Arial")
label1.Font().SetSize(18)

label1.SetCaption("Enter the Hex Value:")

edit1 = lcl.NewEdit(mainForm)
edit1.SetParent(mainForm)
edit1.SetBounds(10, 48, 200, 32)
edit1.Font().SetSize(11)

onClick1 = func(objA) {
    numT = tk.HexToInt(edit1.Text())

    if numT < 0 {
        edit1.SetText("invalid hex value")
    } else {
        edit1.SetText(tk.IntToStr(numT))
    }
}

lastResult = ""

onClick2 = func(sender) {
    lastResult = edit1.Text()
    application.Terminate()
}

button1 = lcl.NewButton(mainForm)
button1.SetParent(mainForm)
button1.SetLeft(20)
button1.SetTop(90)
button1.SetCaption("Convert")
button1.SetOnClick(lcl.NewTNotifyEvent(onClick1))

button2 = lcl.NewButton(mainForm)
button2.SetParent(mainForm)
button2.SetLeft(110)
button2.SetTop(90)
button2.SetCaption("Close")
button2.SetOnClick(lcl.NewTNotifyEvent(onClick2))

application.Run()

pl("the last result: %v", lastResult)


那么在命令行输入参数执行的结果如下:

> C:\goprjs\src\github.com\topxeq\gox\scripts>gox hexToInt.gox A8FE
args length: 3
Try to convert A8FE
Result: 43262

可以看到,程序转换了数字之后,直接退出了。

再试试如果不输入数字运行该脚本,将弹出图形界面如下:

输入一个16进制数字9CE6,然后点击“Convert”按钮可以得到转换结果:

最后点击“Close”按钮退出图形界面后,可以发现命令行窗口仍然输出:

the last result: 40166

这是我们为了演示在图形界面退出后,程序仍然可以继续以命令行方式执行而做的示例。lastResult是从图形界面中获取的数字,这证明了图形界面和命令行界面是可以共享数据、互通操作的。

这个例子充分说明,Gox语言中可以实现命令行界面与GUI图形界面的随意切换,并且能够共享数据。在实际应用中,这点是非常有用的,例如:一般的终端维护以命令行操作比较快捷,但涉及大段文本复制粘贴等操作时,如果有图形界面会更加方便。

 


 

* 注:由于0.988版本后,为了减少不必要的文件体积,Gox已经放弃了其他脚本引擎,仅支持Qlang引擎,因此下面的内容已经无效,仅留作对旧版本的参考。

下面是同样功能的Anko引擎版

// anko

tk = import("tk")

lenT = len(argsG)

if lenT > 1 {
    pl("Try to convert %v", argsG[1])

    numT = tk.HexToInt(argsG[1])
    
    pl("Result: %v", numT)

    return
}

lcl = import("lcl")

errT = lcl.InitLCL()

if errT != nil {
    plerr(errT)
    exit()
}

application = lcl.GetApplication()

application.Initialize()

application.SetTitle("Hex to Integer converter")
application.SetMainFormOnTaskBar(true)

mainForm = application.CreateForm()

mainForm.SetWidth(400)
mainForm.SetHeight(200)
mainForm.SetCaption("Hex to Integer converter")
mainForm.SetPosition(lcl.PoScreenCenter)

mainForm.Font().SetSize(11)

label1 = lcl.NewLabel(mainForm)
label1.SetParent(mainForm)
label1.SetLeft(10)
label1.SetTop(10)
label1.Font().SetName("Arial")
label1.Font().SetSize(18)

label1.SetCaption("Enter the Hex Value:")

edit1 = lcl.NewEdit(mainForm)
edit1.SetParent(mainForm)
edit1.SetBounds(10, 48, 200, 32)
edit1.Font().SetSize(11)

onClick1 = func (objA) {
    numT = tk.HexToInt(edit1.Text())

    if numT < 0 {
        edit1.SetText("invalid hex value")
    } else {
        edit1.SetText(toString(numT))
    }
}

lastResult = ""

onClick2 = func(sender) {
    lastResult = edit1.Text()
    application.Terminate()
}

button1 = lcl.NewButton(mainForm)
button1.SetParent(mainForm)
button1.SetLeft(20)
button1.SetTop(90)
button1.SetCaption("Convert")
button1.SetOnClick(&onClick1)

button2 = lcl.NewButton(mainForm)
button2.SetParent(mainForm)
button2.SetLeft(110)
button2.SetTop(90)
button2.SetCaption("Close")
button2.SetOnClick(&onClick2)

application.Run()

pl("the last result: %v", lastResult)

那么在命令行输入参数执行的结果如下:

> gox scripts\hexToInt.gox abcd
Try to convert abcd
Result: 43981

可以看到,程序转换了数字之后,直接退出了。

再试试如果不输入数字运行该脚本,将弹出图形界面如下:

输入一个16进制数字,

然后点击“Convert”按钮可以得到转换结果:

最后点击“Close”按钮退出图形界面后,可以发现命令行窗口仍然输出:

the last result: 16773102

这是我们为了演示在图形界面退出后,程序仍然可以继续以命令行方式执行而做的示例。lastResult是从图形界面中获取的数字,这证明了图形界面和命令行界面是可以共享数据、互通操作的。

这个例子充分说明,Gox语言中可以实现命令行界面与GUI图形界面的随意切换,并且能够共享数据。在实际应用中,这点是非常有用的,例如:一般的终端维护以命令行操作比较快捷,但涉及大段文本复制粘贴等操作时,如果有图形界面会更加方便。

推荐阅读更多精彩内容