Go言語でGTK+3のTreeViewを使ってテーブルウィジェットを作る方法
2025/08/11
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()
}
スポンサーリンク

