简单的Go-ui界面

首先搭建环境使用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

简单的Go-ui界面_第1张图片
如上图所示表示下载成功

展示一个小的登录窗口

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()
}

简易界面
简单的Go-ui界面_第2张图片

你可能感兴趣的:(golang)