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

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

Go言語でGTK+3のTreeViewを使ってテーブルウィジェットを作る方法

   

Go言語でGTK+3のTreeViewを使う方法についてです。TreeViewという名前からディレクトリのようなツリー構造で表すウィジェットかと思ってしまいますが、実態はExcelのような2元表を作るテーブルウィジェットです。これをGo言語から制御しようというわけです。

Go言語からGTK+3を使う方法については以下の記事を参照ください。

Go言語からGTK+3を使うためのライブラリは以下の2つがよく使われていると思います。

今回、TreeViewを使ううにあたっては、github.com/gotk3/gotk3/を使うことにしました。正直、mattnさんのライブラリの方を使いたかったんですけどね。Twitterでフォローしているし僕のツイートにmattnさん直々にメンションいただいたこともあったので、できればgithub.com/mattn/go-gtk/を使いたかったのですが、ググってもTreeViewを使う例が見つからなかったんです。誰かやり方わかっている人いたら教えてください。

 

実行例

こちらが今回の実行例です。

 

ソースコード

こちらがソースコード。この場ではシンプルなコードに表現したかったのでエラー処理を省いています。適宜追加してください。

package main

import (
  "github.com/gotk3/gotk3/glib"
  "github.com/gotk3/gotk3/gtk"
)

func main() {
  gtk.Init(nil)

  win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
  win.SetTitle("GTK Table Test")
  win.Connect("destroy", func() {
    gtk.MainQuit()
  })
  win.SetPosition(gtk.WIN_POS_CENTER)
  win.SetDefaultSize(600, 300)

  treeView, _ := gtk.TreeViewNew()

  cellRenderer, _ := gtk.CellRendererTextNew()
  column0, _ := gtk.TreeViewColumnNewWithAttribute("ID", cellRenderer, "text", 0)
  column1, _ := gtk.TreeViewColumnNewWithAttribute("Name", cellRenderer, "text", 1)
  column2, _ := gtk.TreeViewColumnNewWithAttribute("Address", cellRenderer, "text", 2)

  treeView.AppendColumn(column0)
  treeView.AppendColumn(column1)
  treeView.AppendColumn(column2)

  listStore, _ := gtk.ListStoreNew(glib.TYPE_STRING, glib.TYPE_STRING, glib.TYPE_STRING)
  treeView.SetModel(listStore)

  win.Add(treeView)

  listStore.Set(listStore.Append(), []int{0, 1, 2}, []interface{}{"1", "鈴木太郎", "東京都"})
  listStore.Set(listStore.Append(), []int{0, 1, 2}, []interface{}{"2", "山田隆", "北海道"})
  listStore.Set(listStore.Append(), []int{0, 1, 2}, []interface{}{"3", "渡辺花子", "大阪府"})
  listStore.Set(listStore.Append(), []int{0, 1, 2}, []interface{}{"4", "池田浩", "福岡県"})

  win.ShowAll()
  gtk.Main()
}
 

 

スポンサーリンク

 - Go言語, Gtk