post Image
golangのGUIパッケージgo-gtkを試す

URL

https://github.com/mattn/go-gtk

環境

Ubuntu16.04 64bit
go1.8.0
GTK(GIMP Tool Kit)は使ったことがない

インストール

apt-get install libgtk2.0-dev libglib2.0-dev libgtksourceview2.0-dev
go get github.com/mattn/go-gtk/gtk

# go installについては後述、必須ではない
go install github.com/mattn/go-gtk/gtk

Windowsでも動くみたいですが、linuxで導入が簡単ということはそっちで開発したほうが間違いないでしょう。
手順が増えるとミスも起こりやすくなります。

うごけー!

exampleを覗いて、最低限の機能だけを取り出しました。

package main

import "github.com/mattn/go-gtk/gtk"

func main() {
    gtk.Init(nil) // 無いとpanic
    win := gtk.NewWindow(gtk.WINDOW_TOPLEVEL) // ウインドウを作成
    win.ShowAll() // ウインドウを表示
    gtk.Main() // シグナル受信を待機
}

go-gtkサンプル.png

goで良く用いられるshinyと比べると相当短く書くことができます。
環境構築は面倒なのでトレードオフですね。

設定

これだけでは使えないので、win(ウインドウ用の変数)に設定を追加します。

win.SetTitle("空のウィンドウ") // タイトルバーに表示される
win.SetSizeRequest(400, 300) // サイズ指定
win.Connect("destroy", gtk.MainQuit) // ✘ボタンでプログラムを停止(gtk.Main()の待機を終了)

簡単な設定だけ。

オブジェクト追加

簡単に調べた感じだとGTKではオブジェクトじゃなくって、ウィジットとかコンテナウィジットとか言うそうです。

とりあえず文字といえばラベルかな?ということで予測を出すと、gtk.NewLabel(string)という関数が。

lab := gtk.NewLabel("このツールはgo-gtkのテストです。")
win.Add(lab)

go-gtk2.png

中央にあるのが標準みたいですね。

全体のソースコード

package main

import "github.com/mattn/go-gtk/gtk"

func main() {
    gtk.Init(nil)
    win := gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
    win.SetTitle("空のウィンドウ")
    win.SetSizeRequest(400, 300)
    win.Connect("destroy", gtk.MainQuit)

    lab := gtk.NewLabel("このツールはgo-gtkのテストです。")
    win.Add(lab)

    win.ShowAll()
    gtk.Main()
}

総評

GTK初心者にも簡単に使える

詳しく調べたりせず、結構適当に書いても動いてしまう。
利点ではありますが、「クロスコンパイルのためにこの関数を呼び出しておくべき」みたいなルールがあったら怖いですね。
ちゃんとしたツールを作りたい時にはちゃんと調べます。

私と同じGolangとGUI経験者であれば、同じようにgo-gtkが簡単に使えるのではないでしょうか。

コンパイル・実行

コンパイルが遅くて、実行が速い。
コンパイルはi7の高性能なCPU/SSD環境で8秒強。
実用的ではないレベルと思っていましたが…

cgoがGoのコンパイル速度に与える影響
こちらを参考に、予めgo install github.com/mattn/go-gtk/gtkを実行したらめちゃくちゃ早くなりました。

go-gtk製作者の@mattnさん、リンク先記事でナイスなコメントをした@mattnさん、ありがとうございます。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。