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

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

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()
}
 

 

スポンサーリンク

 - Go言語, Gtk