package main import ( "fmt" "github.com/mattn/go-gtk/glib" "github.com/mattn/go-gtk/gtk" "os" ) func main() { gtk.Init(&os.Args) //环境初始化 window := gtk.NewWindow(gtk.WINDOW_TOPLEVEL) //创建窗口 window.SetPosition(gtk.WIN_POS_CENTER) //设置窗口居中显示 window.SetTitle("GTK Go!") //设置标题 window.SetSizeRequest(300, 200) //设置窗口的宽度和高度 layout := gtk.NewFixed() //创建固定布局 window.Add(layout) //把布局添加到主窗口中 b1 := gtk.NewButton() //新建按钮 b1.SetLabel("Hello world!") //设置内容 b1.SetSizeRequest(100, 50) //设置按钮大小 layout.Put(b1, 0, 0) //设置按钮在容器的位置 layout.Move(b1, 100, 75) //移动按钮的位置,必须先put,再用move tmp := 10 b1.Connect("pressed", HandleButton, &tmp) window.ShowAll() //显示所有的控件 gtk.Main() //主事件循环,等待用户操作 } func HandleButton(ctx *glib.CallbackContext) { arg := ctx.Data() //获取用户传递的参数,是空接口类型 p, ok := arg.(*int) //类型断言 if ok { //如果ok为true,说明类型断言正确 fmt.Println("*p = ", *p) //用户传递传递的参数为&tmp,是一个变量的地址 *p = 250 //操作指针所指向的内存 } fmt.Println("按钮b1被按下") d1 := gtk.NewDialog() d1.SetTitle("Test Dialog") d1.SetPosition(gtk.WIN_POS_CENTER) d1.SetSizeRequest(200, 100) d1.Show() //gtk.MainQuit() //关闭gtk程序 }