RubyでのGTK3+開発のTips
RubyでちょっとしたGUIのプログラムを書くとき、GTK3+を使うのは非常に便利である。
調べて大変だったTipsをメモがてらここに記録を残しておく。
ボタンにAltキーのショートカットをつける
Altを押すと下線が引かれたキーでボタンが押せるあれです。
Altアクセスキーとも呼ばれるらしい。
1 2 3 4 5 6 |
require "gtk3" include Gtk # 中略 button=Button::new(label:"開く (_Open)") button.set_use_underline(true) # 後略 |
ボタンのlabelにアンダーバー(_)とアルファベットを続けて書いてset_use_underline(true)
をするとそのアルファベットがショートカットキーになる。
上のコードでは’O’キーを割り当てているが、例えば’P’キーに割り当てたければlabel:"開く (O_pen)"
とすれば良い。
ショートカットキーを押すとボタンが押され、clickedイベントが発生する。
コードからイベントを発生させる
GUIのコンポーネントを操作するのではなく、コードから直接イベントを発生させるときにはsingal_emit
メソッドを用いる。
1 2 3 4 5 6 7 8 9 10 |
require "gtk3" include Gtk # 中略 button=Button::new(label:"ボタン") button.signal_connect(:clicked) do # clickedイベント発生時の処理 end # 中略 button.signal_emit(:clicked) # 後略 |
上記のコードの場合、button.signal_emit(:clicked)
によってbuttonにclickedイベントが発生し、button.signal_connect(:clicked)
で定義された# clickedイベント発生時の処理
が実行される。
これは普通にボタンをクリックしたときと同様の効果である。
キーをバインドする(キー押下イベントを受け取る)
AltアクセスキーではAltキーを押下してからキーを押さなければならないが、特殊キー(エンターキーなど)をバインディングしたかったりAltを押さずにキー押下をイベントを受け取りたいことはある。
そういうときにはkey-press-event
を拾えば良い。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
require "gtk3" include Gtk root=Gtk::Window::new("キーバインディングサンプル") root.signal_connect("key-press-event") do |w,e| case e.string # キーの文字で場合分け when "a" # aキーが押されたら puts("aキーがー押されました") when "b" # bキーが押されたら puts("bキーがー押されました") # 中略 end case e.keyval # キーのコードで場合分け when 65361 # 左矢印キー(←) puts("←キーがー押されました") when 65363 # 右矢印キー(→) puts("→キーがー押されました") # 中略 end end # 後略 |
上記コードで、e.string
とすることでキーの文字を取得することができe.keyval
でキーの番号を取得できる。
keyvalは特殊キーを扱うときに使うと良い。
FileChooserDialogでディレクトリを指定する
FileChooserDialog(ファイルピッカーみたいなやつ)でディレクトリ(フォルダ)を指定する場合は以下のように書く。
1 2 3 4 5 6 7 8 9 10 |
require "gtk3" include Gtk root=Gtk::Window::new("ディレクトリ指定サンプル") # 中略 d=Gtk::FileChooserDialog::new(title:"ディレクトリを選択してください",parent:root,action:"select_folder",buttons:[[Gtk::Stock::OPEN,Gtk::ResponseType::ACCEPT],[Gtk::Stock::CANCEL, Gtk::ResponseType::CANCEL]]) if d.run==Gtk::ResponseType::ACCEPT then puts(d.filename) # 選ばれたパスを出力 end d.destroy # 後略 |
画像を貼る
画像を表示するウィジェットに画像をスケーリングして貼る場合は以下のようになる。
1 2 3 4 5 6 7 8 9 |
require "gtk3" include Gtk path="/home/data/a.png" # 画像ファイルのパスを指定 img=Image::new size=[300,200] # ウィジェットサイズ img.set_size_request(size[0],size[1]) buf=GdkPixbuf::Pixbuf::new(file:path) img.set_pixbuf(buf.scale(size[0],size[0],:hyper)) # 画像をスケーリング # 後略 |
ボタンを有効/無効にする
今更説明の必要はないかもしれないが、ボタンを有効化/無効化するにはsensitive
プロパティにboolを設定する。
true
のときが有効でfalse
が無効である。
1 2 3 4 5 6 7 |
require "gtk3" include Gtk button=Button::new(label:"ボタン") button.sensitive=false # ボタンを無効に # 中略 button.sensitive=true # ボタンを有効に # 後略 |
同じカテゴリー(技術メモ)の他の記事を表示
全記事を表示
タグ: Ruby, プログラミング