programming/go

gtk
Edited: Saturday 28 June 2025

GTK(GIMP Toolkit)是一个广泛使用的跨平台图形用户界面开发工具包。它提供了丰富的控件和强大的功能,能够满足现代图形应用的开发需求。安装GTK库是使用其功能的前提。

Golang并不直接支持GTK,因此需要使用第三方库gotk3来实现GTK的功能绑定。这个库封装了GTK的API,使得Go开发者可以方便地使用GTK构建GUI应用。

实例一:创建一个简单的登录窗口:

package main

import (


    "github.com/gotk3/gotk3/gtk"


    "log"


)


func main() {


    gtk.Init(nil)


    win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)


    if err != nil {


        log.Fatal("无法创建窗口:", err)


    }


    win.SetTitle("登录窗口")


    win.SetDefaultSize(300, 200)


    grid, err := gtk.GridNew()


    if err != nil {


        log.Fatal("无法创建网格:", err)


    }


    userLabel, err := gtk.LabelNew("用户名:")


    if err != nil {


        log.Fatal("无法创建标签:", err)


    }


    grid.Attach(userLabel, 0, 0, 1, 1)


    userEntry, err := gtk.EntryNew()


    if err != nil {


        log.Fatal("无法创建输入框:", err)


    }


    grid.Attach(userEntry, 1, 0, 1, 1)


    passLabel, err := gtk.LabelNew("密码:")


    if err != nil {


        log.Fatal("无法创建标签:", err)


    }


    grid.Attach(passLabel, 0, 1, 1, 1)


    passEntry, err := gtk.EntryNew()


    if err != nil {


        log.Fatal("无法创建输入框:", err)


    }


    passEntry.SetVisibility(false)


    grid.Attach(passEntry, 1, 1, 1, 1)


    loginButton, err := gtk.ButtonNewWithLabel("登录")


    if err != nil {


        log.Fatal("无法创建按钮:", err)


    }


    grid.Attach(loginButton, 1, 2, 1, 1)


    win.Add(grid)


    win.ShowAll()


    win.Connect("destroy", func() {


        gtk.MainQuit()


    })


    gtk.Main()


}





实例二:创建一个带有菜单栏的主窗口:

package main

import (


    "github.com/gotk3/gotk3/gtk"


    "log"


)


func main() {


    gtk.Init(nil)


    win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)


    if err != nil {


        log.Fatal("无法创建窗口:", err)


    }


    win.SetTitle("主窗口")


    win.SetDefaultSize(800, 600)


    vbox, err := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 0)


    if err != nil {


        log.Fatal("无法创建盒子:", err)


    }


    menubar, err := gtk.MenuBarNew()


    if err != nil {


        log.Fatal("无法创建菜单栏:", err)


    }


    fileMenu, err := gtk.MenuNew()


    if err != nil {


        log.Fatal("无法创建菜单:", err)


    }


    fileMenuItem, err := gtk.MenuItemNewWithLabel("文件")


    if err != nil {


        log.Fatal("无法创建菜单项:", err)


    }


    fileMenuItem.SetSubmenu(fileMenu)


    newMenuItem, err := gtk.MenuItemNewWithLabel("新建")


    if err != nil {


        log.Fatal("无法创建菜单项:", err)


    }


    fileMenu.Append(newMenuItem)


    menubar.Append(fileMenuItem)


    vbox.PackStart(menubar, false, false, 0)


    win.Add(vbox)


    win.ShowAll()


    win.Connect("destroy", func() {


        gtk.MainQuit()


    })


    gtk.Main()


}



例子 go gotk gtk

Backlinks

See Also