非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

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を渡します。

 

スポンサーリンク

 - Go言語, Gtk