12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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程序
- }
|