Go-GTK は、GTK という GUI アプリケーションフレームワークを Go に移植したものです。
GTK(Gimp Tool Kit)は、C 言語で書かれた Linux 用の GUI アプリケーションフレームワークです。
フレームワーク(framework)とは、何かをするために便利なように作られた関数などを集めたものです。GUI アプリケーション・フレームワークは、GUI アプリケーションを作るためのフレームワークです。
GTK は、Windows や、 macOS にも移植されています。しかし GUI の見た目が Linux(GNOME)そのものなので、このコーナーでは、Linux 限定とさせていただきます。
まず、ターミナルに次のコードを入力して、Go の開発環境がすでにインストール されているかどうか確認してみましょう。
go version
goがインストールされている場合は次のように表示されます
go version go1.9.3 linux/amd64
インストールされていない場合は、Go の開発環境をインストールします。Go の開発環境のインストールは、Linux Mint や Ubuntu の場合は、apt パッケージマネージャーで、CentOS の場合は、yum パッケージマネージャーでインストールすることができます。wxGo も使いたい場合は、手動でインストールします。
Linux Mint や Ubuntu の場合
sudo apt-get install gccgo-go
// もしくは
sudo apt install golang-go
go version
go version xgcc (Ubuntu 4.9.3-0ubuntu4) 4.9.3 linux/amd64
// もしくは
go version go1.10.4 linux/amd64
CentOS 7 の場合
sudo yum install epel-release
yum info golang
sudo yum install -y golang
go version
go version go1.11.5 linux/amd64
Go-GTK の場合は、Go のバージョンが問題になることはないみたいですが、wxGo の場合は、バージョン 1.9.3 をインストールしなければなりません。wxGo も使うという場合は、手動でバージョン 1.9.3 をインストールします。
違うバージョンの Go がインストールされている場合は、次のようにして、その Go を削除してください。
//手動でインストールしていた場合は
sudo rm -r /usr/local/go
//apt パッケージマネージャーでインストールしていた場合は
sudo apt remove golang-go
//もしくは
sudo apt remove gccgo-go
//yum パッケージマネージャーでインストールしていた場合は、
sudo yum remove golang-go
次のサイトから go 1.9.3 をダウンロードします。
Donwnloads - The Go Programming Language - Golang一番下までスクロールして、Archived Versions をクリック
go1.9.3をクリック
go1.9.3linux-amd64.tar.gz をクリック
自動でアーカイブマネージャーが起動すると思いますので、任意の場所に展開してください。私はホームフォルダに展開しました。
ターミナルを起動して、go を展開したフォルダに移動して、次のコードを入力して go を /usr/local に移動してください。
sudo mv go /usr/local
次のコードを /etc/profile の末尾に追加してください。emacs などを使うと便利です。
sudo emacs /etc/profile
// /etc/profileの末尾の次のコードを追加
export PATH=$PATH:/usr/local/go/bin
ここで一度、Linux を再起動するか再ログインしてください。
go 1.9.3 がインストールできているかどうか確認します。
go version
go version go1.9.3 linux/amd64
Go-GTK を使うためには、GCC がインストールされている必要があります。次のコードで確認とインストールをしてください。
gcc --version
//もしインストールされていなければ
//Linux Mint、Ubuntuの場合は
sudo apt install g++
//CentOS 7の場合は
sudo yum install gcc-c++
次のコードで Go-GTK をインストールします。
//Linux Mint、Ubuntu の場合
sudo apt install -y libgtk2.0-dev libglib2.0-dev libgtksourceview2.0-dev
go get -x github.com/mattn/go-gtk/gtk
//CentOS 7の場合
sudo yum install -y gtk2-devel.x86_64 glib2-devel.x86_64 gtksourceview3-devel.x86_64
go get -x github.com/mattn/go-gtk/gtk
次のコードをお好きなエディタで記述して保存してください。
package main
import (
"github.com/mattn/go-gtk/gtk"
"os"
)
func main() {
gtk . Init(&os.Args)
window := gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
window . SetTitle("Hello Go-GTK")
window . Connect("destroy", gtk.MainQuit)
window . ShowAll()
window . SetSizeRequest(400, 250)
gtk . Main()
}
ターミナルで、main.go を保存したディレクトリに移動して、次のコードで実行してください。
go run main.go
実行は、結構、速いです。
ウィンドウを閉じるとアプリケーションは終了します。
package main
Go のソースコードはパッケージ単位で管理します。特に意図がない限りは、最初のパッケージは main にします。
import (
"github.com/mattn/go-gtk/gtk"
"os"
)
go-gtk と os というパッケージを読み込んでいます。これによって、GTK の関数などが使えるようになります。
func main() {
多くのプログラミング言語と同様に、Go のプログラムも main 関数から始まる決まりになっています。
gtk . Init(&os.Args)
GUIを実装する場合は、必ず記述することになっている標準関数です。名前から察するに「GUIを初期化する」という関数でしょう。
window := gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
ウィンドウを作っています。引数の gtk.WINDOW_TOPLEVEL は、トップレベルウィンドウを指定する定数です。
window . SetTitle("Hello Go-GTK")
ウィンドウのタイトルを設定しています。
window . Connect("destroy", gtk.MainQuit)
Connect 関数は、イベントの発生と処理を結びつけます。そのイベントとは「window」の destroy イベントです。destroy イベントはそのオブジェクトがなくなるときに発生するイベントです。そして、イベントが発生した時の処理が gtk.MainQuit です。gtk.MainQuit は、アプリケーションを終了させる標準関数です。
window . ShowAll()
ウィンドウや GUI 部品は作っただけでは目に見えません。Show もしくは、ShowAll 関数を呼び出すことによって目に見える状態になります。
window . SetSizeRequest(400, 250)
ウィンドウのサイズを横 400 ピクセル、縦 250 ピクセルに設定しています。
gtk . Main()
メインループを始める標準関数です。アプリケーションが継続的に起動し続けるようになります。この関数を呼び出さないと起動したアプリケーションは、一瞬で終了します。