Go言語/GTK+3/Glade: イベント処理
前回、Go言語でGladeを使ったGTK+3プログラミングについて書きました。
今回はイベント処理の方法について書きます。
実行例
実行例はこんな感じ。ボタンを押すと、ラベルの「Hello World」が「Hello Go-GTK」に切り替わるようにします。
UIは以下の記事で使ったものを利用します。
gotk3/gotk3パッケージのインストール
Go言語でGladeを使う場合は、gotk3をインストールする必要があります。インストールに数分かかります。
$ go get github.com/gotk3/gotk3/...
Glade側の設定
イベントを発生させるためにGlade側でいくつか設定が必要です。
まず、ボタンとラベルにIDをつけましょう。前回はウィンドウを表示するだけのプログラムだったのでウィンドウにIDを付けましたが、今回はボタンを押してラベルの表示を変える動きをさせるので、Go言語側から制御できるようにどちらにもIDを付ける必要があります。
次にボタンクリックでイベントを発生させるためにシグナル設定をします。ボタンを選択し「シグナル」タブの中の「clicked」のハンドラーの名前のところに任意の名前を入力します。今回はclicked
としました。
以上の設定が終わったら保存しましょう。
Go言語側のソースコード
ソースコードはこちら。
package main import "github.com/gotk3/gotk3/gtk" func main() { gtk.Init(nil) builder, _ := gtk.BuilderNew() builder.AddFromFile("hello.glade") obj01, _ := builder.GetObject("window1") window := obj01.(*gtk.Window) window.Connect("destroy", gtk.MainQuit) obj02, _ := builder.GetObject("label1") label1 := obj02.(*gtk.Label) obj03, _ := builder.GetObject("btn1") btn1 := obj03.(*gtk.Button) btn1.Connect("clicked", func() { onclicked(label1) }) window.ShowAll() gtk.Main() } func onclicked(label1 *gtk.Label){ label1.SetLabel("<span font=\"24\">Hello Go-GTK!</span>") }
イベントを発生させている部分は以下のところです。clicked
は先程Gladeで設定したハンドラーの名前です。
btn1.Connect("clicked", func() { onclicked(label1) })
ボタンを押すとonclicked関数が実行されるようになっています。onclicked関数でlabelを制御したいのですがコントロールのスコープ外なのでonclicked関数にlabel1を渡します。
スポンサーリンク