简单的Go-ui界面

    科技2022-07-13  142

    首先搭建环境使用MSYS2

    MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin (POSIX 兼容性层) 和 MinGW-w64(从"MinGW-生成")基础上产生的,追求更好的互操作性的 Windows 软件。

    下载之后在msys2命令行中安装gtk

    pacman -S mingw-w64-x86_64-gtk3 pacman -S mingw-w64-x86_64-gtk2 pacman -S mingw-w64-x86_64-glade //安装glade

    会出现下载不上发生错误因为是国外源,改为国内就行了

    修改镜像 在安装路径\etc\pacman.d中,有3个配置文件,分别为:mirrorlist.mingw32、mirrorlist.mingw64和mirrorlist.msys。 用notepad++打开这三个文件

    在mirrorlist.msys文件中最上端添加 Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch

    修改mirrorlist.mingw32 在最上面增加 Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686

    修改mirrorlist.mingw64 在最上面增加 Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64 修改完后,重新运行msys2.exe

    配置环境变量: 在Path中添加

    安装路径\mingw64\bin安装路径\usr\bin

    测试是否下载成功,打开cmd,输入以下命令

    pkg-config --cflags gtk+-2.0 make -v

    如上图所示表示下载成功

    展示一个小的登录窗口

    package main import ( "github.com/mattn/go-gtk/gdk" "github.com/mattn/go-gtk/gdkpixbuf" "github.com/mattn/go-gtk/gtk" "os" ) type LoginWidet struct { window *gtk.Window button1 *gtk.Button button2 *gtk.Button labelOne *gtk.Label labelTwo *gtk.Label labelThree *gtk.Label entryOne *gtk.Entry entryTwo *gtk.Entry } type LoginInfo struct { w, h int //窗口的宽高 } type Sum struct { LoginWidet LoginInfo } //函数,给按钮设置图片 func ButtonSetImageFromFile(button *gtk.Button, filename string) { //获取按钮的宽度和高度 var w, h int button.GetSizeRequest(&w, &h) //获取pixbuf,指定其大小 pixbuf, _ := gdkpixbuf.NewPixbufFromFileAtScale(filename, w, h, false) //通过pixbuf新建image image := gtk.NewImageFromPixbuf(pixbuf) //按钮设置图片 button.SetImage(image) //释放资源 pixbuf.Unref() } func (obj *Sum) CreateWindow() *gtk.Window { builder := gtk.NewBuilder() builder.AddFromFile("login.glade") //获取窗口控件 obj.window = gtk.WindowFromObject(builder.GetObject("window1")) //获取标签控件 obj.labelOne = gtk.LabelFromObject(builder.GetObject("label1")) obj.labelTwo = gtk.LabelFromObject(builder.GetObject("label2")) obj.labelThree = gtk.LabelFromObject(builder.GetObject("label3")) obj.button1 = gtk.ButtonFromObject(builder.GetObject("button1")) obj.button2 = gtk.ButtonFromObject(builder.GetObject("button2")) obj.entryOne = gtk.EntryFromObject(builder.GetObject("entry1")) obj.entryTwo = gtk.EntryFromObject(builder.GetObject("entry2")) //设置属性 obj.w = 400 obj.h = 300 obj.window.SetTitle("登录") obj.window.SetPosition(gtk.WIN_POS_CENTER) obj.window.SetSizeRequest(obj.w, obj.h) obj.window.SetDecorated(false) //鼠标按下事件 obj.window.SetEvents(int(gdk.BUTTON_PRESS_MASK | gdk.BUTTON1_MOTION_MASK)) //设置按钮 ButtonSetImageFromFile(obj.button2,"image/close1.png") obj.button1.SetLabel("登录") //obj.button2.SetLabel("关闭") obj.button2.SetCanFocus(false) //设置标签内容 obj.labelOne.SetText("欢迎登陆") obj.labelTwo.SetText("用户名:") obj.labelThree.SetText("密码:") obj.labelOne.ModifyFontSize(20) //设置输入框 obj.entryOne.SetText("") obj.entryTwo.SetVisibility(false) return obj.window } func (obj *Sum) HandleSignal(){ obj.button1.Connect("clicked", func() { }) obj.button2.Connect("clicked", func() { gtk.MainQuit() }) } func main() { gtk.Init(&os.Args) var obj Sum window := obj.CreateWindow() obj.HandleSignal() window.ShowAll() gtk.Main() }

    简易界面

    Processed: 0.011, SQL: 8