码迷,mamicode.com
首页 > 其他好文 > 详细

Golang Gtk+3教程:开始

时间:2018-11-02 14:29:24      阅读:328      评论:0      收藏:0      [点我收藏+]

标签:水平   htm   tde   输入   def   img   connect   技术   com   

GTK+是一个控件工具包。每个通过GTK+创建的用户界面由一些控件组成。
控件是层级式的,window控件是主容器,通过在window中添加按钮、下拉菜单、输入字段等其他控件构成用户界面。
如果是复杂的用户界面,推荐使用GtkBuilder(从XML UI描述文件创建界面)来代替手动编译用户界面。
你还可以使用可视化的界面编辑器,像Glade

GTK+是事件驱动的。这个工具包监听像点击按钮一样的事件并将其发送给你的应用。

为了使你初步了解如何使用GTK+,我们将创建一个Gtk应用。这个应用会创建一个200*200像素的空window

程序运行效果:

技术分享图片

package main

import (
    "github.com/gotk3/gotk3/glib"
    "github.com/gotk3/gotk3/gtk"
    "log"
    "os"
)

func main() {
    const appId = "com.nayoso.example"
    //每个gtk3程序都需要一步
    app, err := gtk.ApplicationNew(appId, glib.APPLICATION_FLAGS_NONE)
    
    if err != nil {
        log.Fatal("Could not create application.", err)
    }
    
    //为activate事件绑定函数, activate会在程序启动时触发,也就是app.Run()时
    app.Connect("activate", func() {
        onActivate(app)
    } )

    app.Run(os.Args)    //运行gtkApplication
}

func onActivate(application *gtk.Application) {
    appWindow, err := gtk.ApplicationWindowNew(application) //创建window控件

    if err != nil {
        log.Fatal("Could not create application window.", err)
    }
    //设置窗口属性
    appWindow.SetTitle("Basic Application.")
    appWindow.SetDefaultSize(400, 400)
    //显示窗口
    appWindow.Show()
}

gtk.ApplicationNew()接受两个参数一个是 应用标识,其一般使用你域名的倒序形式。另一个是GApplicationFlags,其为了满足你对应用的特定需求。通常就像实例代码一样写glib.APPLICATION_FLAGS_NONE就可以了。

好的,我们已经创建了第一个窗口。但这只是一个孤零零的窗口,什么都没有。
接下来我们就来显示一个按钮吧,并让其输出著名的Hello World :-D。

package main

import (
    "fmt"
    "github.com/gotk3/gotk3/glib"
    "github.com/gotk3/gotk3/gtk"
    "log"
    "os"
)

//这部分是相同的
func main() {
    const appId = "com.nayoso.example"
    app, err := gtk.ApplicationNew(appId, glib.APPLICATION_FLAGS_NONE)

    if err != nil {
        log.Fatal("Could not create application.", err)
    }

    app.Connect("activate", func() {
        onActivate(app)
    } )

    app.Run(os.Args)
}

//
func onActivate(application *gtk.Application) {

    appWindow, err := gtk.ApplicationWindowNew(application)
    if err != nil {
        log.Fatal("Could not create application window.", err)
    }
    appWindow.SetTitle("Basic Application.")
    appWindow.SetDefaultSize(400, 400)

    buttonBox, err := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 2)     //以水平布局创建一个容器, 第二个参数是其中控件的像素间隔
    if err != nil {
        log.Fatal(err)
    }
    appWindow.Add(buttonBox)    //将布局添加到window中

    button, err := gtk.ButtonNewWithLabel("Hello World")        //创建一个按钮
    if err != nil {
        log.Fatal(err)
    }
    buttonBox.Add(button)       //将按钮添加到box容器中

    button.Connect("clicked", func() {  //让我们为按钮点击添加一个函数,每次点击都会在命令行输出Hello World
        fmt.Println("Hello World")
        appWindow.Destroy()     //摧毁窗口
    })


    appWindow.ShowAll()     //与Show()不同在于,它会输出Window中的子控件。你可以修改,查看不同的效果
}

程序运行效果:

技术分享图片

Golang Gtk+3教程:开始

标签:水平   htm   tde   输入   def   img   connect   技术   com   

原文地址:https://www.cnblogs.com/xiyu714/p/9895614.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!