Go言語/GTK+3でモーダルウィンドウを作る方法
Go言語/GTK+3でモーダルウィンドウを作る方法です。UIは前回同様Gladeを使って作りました。
モーダルウィンドウの仕様は以下の通り。
- モーダルウィンドウが表示されている間はメインウィンドウの操作はロックされている。
- モーダルウィンドウ表示中にメインウィンドウが前に来ることがない。
これをGo言語/GTK+3でどう作るかを書きます。
実行例
完成形はこんな感じです。メインウィンドウにボタンが1つあり、それをクリックするとモーダルウィンドウが現れるという簡単なプログラムを作ります。
仕様どおりモーダルウィンドウが表示されている間はメインウィンドウの操作はロックされます。また、モーダルウィンドウ表示中にメインウィンドウが前に来ることもありません。
Gladeの設定方法
モーダルウィンドウはGtkDialogを使用します。
初期画面はこんな感じで、デフォルトでメインエリアとボタンエリアにわかれたレイアウトになっています。
今回はメインウィンドウから呼び出すだけのプログラムなので色々削ぎ落として以下のようにしました。
モーダルウィンドウで重要なのが、GtkDialogの全般タブのところで以下の赤線のところにチェックを入れることです。
ファイル名 | dialog.grade |
ウィンドウID | dialog1 |
ちなみにメインウィンドウはボタンを1つ設置しただけのものにしました。
ファイル名 | main.grade |
ウィンドウID | window1 |
ボタンID | btn1 |
Go言語側のソースコード
以下のソースコードを実行すると、先程実行例で示したものが現れます。
package main import "github.com/gotk3/gotk3/gtk" func main() { gtk.Init(nil) builder, _ := gtk.BuilderNew() builder.AddFromFile("main.glade") obj01, _ := builder.GetObject("window1") window := obj01.(*gtk.Window) window.Connect("destroy", gtk.MainQuit) obj02, _ := builder.GetObject("btn1") btn1 := obj02.(*gtk.Button) btn1.Connect("clicked", func() { onclicked() }) window.ShowAll() gtk.Main() } func onclicked(){ builder, _ := gtk.BuilderNew() builder.AddFromFile("dialog.glade") obj01, _ := builder.GetObject("dialog1") dialog := obj01.(*gtk.Dialog) dialog.ShowAll() }
スポンサーリンク