gogtk.go 1.5 KB

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