一、写一个空白窗口
package main
import (
"os"
"github.com/mattn/go-gtk/gtk"
)
func main() {
//1.初始化
gtk.Init(&os.Args)
//用户所写代码
win := gtk.NewWindow(gtk.WINDOW_TOPLEVEL) //带边框的顶层窗口
win.SetTitle("go gtk") //设置标题
win.SetSizequest(480, 320) //设置大小
win.Show() //显示
//主事件循环
gtk.Main()
}
二、添加控件
控件具有属性和方法
例如按钮(文本信息)属性,(按键)方法
控件分为容器控件和非容器控件
容器控件:可以容纳其他的控件,其分为两类。一类如窗口按钮;另外一类可以容纳多个控件,如局部控件。
非容器控件:他不可以容纳别的控件,如标签,行编辑。
代码示例:在空白窗口放两个按钮
package main
import (
"os"
"github.com/mattn/go-gtk/gtk"
)
func main() {
//1.初始化
gtk.Init(&os.Args)
//用户所写代码
//1.创建主窗口
win := gtk.Newwindow(gtk.WINDOW_TOPLEVEL)
//2.设置窗口的属性(大小,标题)
win.SetTitle("hhh")
win.SetSizequest(480,320)
//3.创建容器控件(固定布局,任意布局)
layout := gtk.NewFixed ()
//4.布局添加到窗口上
win.Add(layout)
//5.创建按钮
b1 := gtk.NewButtonWithLabel("^_^")
b2 := gtk.NewButtonWithLabel("q_q")
b2.SetResizeMode(100,100) //设置按钮的大小
//6.按钮添加到布局中
layout.Put(b1, 0, 0)
layout.Put(b2, 100, 100)
//7.显示控件
win.Show ()
layout.Show ()
b1.Show
bw.Show//也可以win.ShowAll ()
//主事件循环
gtk.Main()
}
三、信号处理
信号注册函数的说明
func (v *Widget) Connect (s string, f interface{}, datas ...interface{} ) int
功能:信号的注册
参数:
v、信号的发出者
s、信号标志
f、回调函数的名称
datas、给回调函数传的参数,只能传递一个参数
返回值、
注册函数的标志。
信号回调示例
//信号处理回调函数
func HandleButton(ctx *glib.Callbackcontext){
arg := ctx.Data()
p, ok := arg.(*int)
if ok {
fmt.Println("*p = ",*p)
}
}
代码示例
package main
import (
"fmt"
"os"
"github.com/mattn/go-gtk/glib"
"github.com/mattn/go-gtk/gtk"
)
func HandleSignal(ctx *glib.Callbackcontext) {
fmt.Println("owo")
arg := ctx.Data()
data, ok := arg.(string)
if ok {
fmt.Println("yes yes",data)
}
}
func main() {
//1.初始化
gtk.Init(&os.Args)
//用户所写代码
//1.创建主窗口
win := gtk.Newwindow(gtk.WINDOW_TOPLEVEL)
//2.设置窗口的属性(大小,标题)
win.SetTitle("hhh")
win.SetSizequest(480, 320)
//3.创建容器控件(固定布局,任意布局)
layout := gtk.NewFixed()
//4.布局添加到窗口上
win.Add(layout)
//5.创建按钮
b1 := gtk.NewButtonWithLabel("^_^")
b2 := gtk.NewButtonWithLabel("q_q")
b2.SetResizeMode(100, 100) //设置按钮的大小
//6.按钮添加到布局中
layout.Put(b1, 0, 0)
layout.Put(b2, 100, 100)
//7.显示控件
win.Show()
layout.Show()
b1.Show
b2.Show //也可以win.ShowAll ()
//8.信号的处理
str := "are you ok"
//只要按下按钮,自动调用HandleSingal,str为传给其的参数
b1.Connect("clicked",HandleSignal, str)
//主事件循环
gtk.Main()
}