본문 바로가기
Programming/Golang

Gotk3를 이용한 go언어 GUI 개발 예제

by Wilkyway 2020. 3. 16.
반응형

 

사내에서 사용할 간단한 GUI프로그램 개발 환경을 구상 중입니다. 배포도 해야해서 VM위에서 돌아가는 Java는 좀 꺼림직하고... 다른 언어로 쓸 수 있는 GUI Toolkit을 찾아보다가 결국 QT/GTK/WxWidgets 로 가야할 것 같은데요. 배포가 어렵다는 C/C++로 가는 것 보다는 요즘 언어인 Go언어로, 그리고 바인딩이 잘 되어있는 GTK로 가보려고 합니다. Go언어 바인딩은 Gotk3가 있습니다. 이번 포스트에서는 Gotk3설치 및 예제 프로그래밍까지 수행해 보겠습니다.

 

우선 사전 준비해야 하는 작업이 좀 있습니다. 생각보다....(이거 하면서 그냥 Swing써야겠다고 생각하는 중....ㅠㅠ)

1. git 설치

2. MinGW-w64설치(MSYS2설치)

3. GTK 및 dependencies 설치

4. MinGW 환경변수 추가

5. Gotk3 설치

6. 예제 실행

 

1. GIT 설치

요기 사이트로 가서 Git을 설치합니다. 요즘은 Git을 알아야 한다는데,, 아직 제가 잘 몰라서,,

나중에 공부해서 올리는 것으로 하고, 우선 설치하겠습니다.

 

 

 

 

 

 

2. MinGW-w64설치(MSYS2설치)

요기 사이트에서 msys2-x86_64-xxxxxxx.exe파일을 다운받아 설치해 줍니다. 이걸 설치하면 리눅스에서 사용하던 터미널이 생깁니다. 그럼 리눅스 명령어로 GTK를 설치할 준비가 됩니다.

 

 

 

 

 

 

설치하고 나면 저런 터미널이 뜹니다.

 

 

 

MinGW(MSYS2)를 실행한 모습

 

 

 

3. Dependencies 설치

방금 설치한 MSYS2 터미널을 찾아 실행해 보겠습니다.

 

 

 

 

 

 

그리고 아래 명령을 차례로 수행해주세요.

  1) pacman --noconfirm --needed -Sy bash pacman pacman-mirrors

  2) pacman --noconfirm -Su

  3) pacman --noconfirm -S mingw-w64-x86_64-gcc mingw64/mingw-w64-x86_64-pkg-config mingw-w64-x86_64-gtk3

 

 

 

 

 

 

마지막 명령에서 에러가 마구 발생을 하네요...ㅠㅠ.

구글링 하다가...터미널 창 새로 열고 실행했더니 잘 되는 듯 합니다. 그러다가 또 에러 반복..이건 뭔지....ㅠㅠ

결국 패키지 별로 나누어 설치하고 나서야 성공합니다.

그리고 추가로

bash -c "sed -i -e 's/-Wl,-luuid/-luuid/g' C:/msys64/mingw64/lib/pkgconfig/gdk-3.0.pc"

를 마지막에 한번 실행해 줘야 나중에 컴파일 할 때 에러가 없습니다. 버그픽스 명령어 같습니다.

 

4. MinGW 환경변수 추가

- C:\msys64\mingw64\bin

- C:\msys64\usr\bin

요 두 폴더를 Path에 추가해줍니다.

 

 

 

 

 

 

5. Gotk3 설치

이제 진짜 Gotk3가 설치되는지 보겠습니다. 이번엔 Git 터미널에서 아래 명령어를 수행합니다.

go get github.com/gotk3/gotk3/gtk

 

 

 

 

 

 

뭔가 에러가 조금 있었지만, Fail은 아닌 것 같습니다.

한번 아래 코드로 실행이 되는지 보겠습니다.

 

6. 예제 실행

아래 소스를 입력하고 Build&Run을 수행합니다.

Golang이 원래 컴파일이 엄청 빠른 언어인데, 최초 컴파일 때는 시간이 많이 걸립니다. 낼 출근이 심히 걱정됩니다...

4시간 자야되네...ㅠㅠ이게 머라고..

package main

import (
	"log"

	"github.com/gotk3/gotk3/gtk"
)

func main() {
	// Initialize GTK without parsing any command line arguments.
	gtk.Init(nil)

	// Create a new toplevel window, set its title, and connect it to the
	// "destroy" signal to exit the GTK main loop when it is destroyed.
	win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
	if err != nil {
		log.Fatal("Unable to create window:", err)
	}
	win.SetTitle("Simple Example")
	win.Connect("destroy", func() {
		gtk.MainQuit()
	})

	// Create a new label widget to show in the window.
	l, err := gtk.LabelNew("Hello, gotk3!")
	if err != nil {
		log.Fatal("Unable to create label:", err)
	}

	// Add the label to the window.
	win.Add(l)

	// Set the default window size.
	win.SetDefaultSize(800, 600)

	// Recursively show all widgets contained in this window.
	win.ShowAll()

	// Begin executing the GTK main loop.  This blocks until
	// gtk.MainQuit() is run.
	gtk.Main()
}

 

 

 

 

 

 

야호~~성공~~!!

이제 자러갑시다..^^;;;;;

 

Glade와 연동하는 건 다음기회에...

반응형

댓글