Golang Gtk+3教程:开始

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中的子控件。你可以修改,查看不同的效果
}

程序运行效果:

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

时间: 2024-10-20 16:35:01

Golang Gtk+3教程:开始的相关文章

Golang Gtk+3教程:Grid布局

在上个例子中我们使用了box布局,现在让我们来学习另一种布局--grid.其实这几种布局都大同小异,如果你看懂了上一个例子,想必使用grid也不是难事. 程序运行效果: package main import ( "github.com/gotk3/gotk3/glib" "github.com/gotk3/gotk3/gtk" "os" ) func main() { const appId = "com.nayoso.example

Golang Gtk+3教程:GtkBuilder使用XML构建UI

在这节我将介绍GtkBuilder,其使我们可以从一个描述界面的xml文件构建UI.而这个文件我们可以使用Glade生成,这会极大的方便我们编辑用户界面.这节我们会使用到这么一个XML文件,名字为Builder.ui(可以在本文后面看到,请创建并放在项目下).习惯上,我们使用.ui作为扩展名. 示例: package main import ( "github.com/gotk3/gotk3/glib" "github.com/gotk3/gotk3/gtk" &q

Linux之GTK系列教程

00.背上行囊1--程序员学习之道 01.背上行囊2--为什么要学习GTK 02.背上行囊3--GUI概述 03.背上行囊4--GTK简介 04.背上行囊5--GTK环境搭建( Linux ) 05.背上行囊6--GTK环境搭建( windows ) 06.踏上旅途1--一个简单的空白窗口 07.踏上旅途2--控件的添加 08.踏上旅途3--布局容器之水平布局 09.踏上旅途4--布局容器之垂直布局 10.踏上旅途5--布局容器之表格布局 11.踏上旅途6--布局容器之固定布局 12.踏上旅途7

GTK+中的树状列表构件(GtkTreeView)

GTK+中的树状列表构件(GtkTreeView) 在本章的GTK+程序设计教程中,我们将向大家重点介绍非常常用也有点复杂的构件--GtkTreeView . GtkTreeView?构件是一个高级的构件,利用他你就可以制作出漂亮的普通列表或者是树状的列表.这个构件里可以包含一或者多行.他的构架呢?正是采用了大名鼎鼎的MVC (Model View Controller) 设计框架.也就是说数据和显示方式是进行了一种分离的操作. 之前我们有说过复杂这个问题,于是在GtktreeView构件中确实

Gtk中的文本视图(GtkTexViewWidget)

Gtk中的文本视图(GtkTexView Widget) 在本章的Gtk+程序设计教程中,我们将重点介绍 GtkTexView 构件. GtkTexView?w构件被常常用来显示和编辑多行的文本.正如我们一再提到的,?GtkTexBuffer?构件也是给予MVC的设计.GtkTextView 就是显示(view)元素而 GtkTexBuffer 则代表了model 元素. GtkTexBuffer 常常被用来处理文本数据.GtkTextTag则是一种被用于文本的属性.?GtkTextIter则是

gtk+ 20190624

一.Linux平台上安装GTK 1.首先Jetson TX1/TX2 Network---->Wired 需要修改设置. 2.https://jingyan.baidu.com/article/e9fb46e17ba76f7521f766d5.html 二.GTK使用教程 1>下载网址:https://download.csdn.net/download/itrial/9744534:下载存储位置:"F:\工作\资料\GTK+程序设计中文版.pdf" 2>Linux之

GUI引发的一场脑部大战|wine、wsl、mono、gtk、qt

没写完不想写了,先发布吧,这就是一个引子. 在春天种下一颗种子---- 思路开拓了,方法一下子就来了 wine可以运行大部分Windows软件,实在不行还有虚拟机,虚拟机性能弱,还可以进行远程服务器玩耍. 大家都来完善Linux系统,就可以慢慢放弃使用Windows系统了 golang+gtk golang+QT C#+mono dotnet core+gtk# dotnet core3+gtk#golang + gtkjava + swt\swingc+gtk\qt 先说一下我的个人需求吧,就

“菜单”(menubar)和“工具栏”(toolbars)

"菜单" (menubar)和"工具栏"(toolbars) 在这个部分的GTK+程序设计教程中,我们使用"菜单"和"工具栏". "菜单"( menubar)?是GUI程序中最为常见的部分之一.各种各样的命令和功能都可以借以"菜单"来实现. 当我们习惯在终端(console)中启动应用程序的时候,必须要记得很多复杂的命令和参数 ,在本章节中我们将 这一切都转化为可见的操作.菜单和工具栏中

大白话系列之定位

从自学CCNA到CCNP,再到学安全 乃至当前的区块链.Python.Go,自认为了解的不少,自己算不上什么大牛,但每个领域都能够完成过一些事儿,思科的写过指导手册.帮客户配置过网络.安全得到过圈里人的认可.Python写过自动化运维系统.Go写过安全检测软件,当前的区块链,emmm,还没想好这个领域的落地场景,暂且理解为:工作需要吧. 学了这么多领域总体来说有种感觉:看不完的书,学不完的技术,干不完的活儿. 大白话系列是我自己最近在思考自己的职业规划中的一些想法,我想把我会的东西系统个总结出来