From: Masao M. <mu...@hi...> - 2003-08-24 17:27:12
|
きたさん むとうです。チュートリアル、良い感じで進んでますね。 ちょっと、ファイルセレクションのところで、気づいたので コメントさせていただきます。 ファイルセレクションはダイアログのサブクラスですので Gtk::Dialog#runを使えます。 で、 filew.ok_button.signal_connect("clicked") {puts "#{filew.filename}"} という形でシグナルに接続する方法は、今後ほとんど使われないはずです。 というのは、普通、ファイルセレクションをダイアログ画面は、 親画面が呼び出して、処理が終了するまではファイルが選択される まで待ちにしたい場合がほとんどだからです。 例えば、親画面のボタンに対し、きたさんの例を埋め込むと 以下のようなイメージになります。 parent_button.signal_connect("clicked") do filew = Gtk::FileSelection.new("File selection") filew.signal_connect("destroy") {Gtk.main_quit} filew.ok_button.signal_connect("clicked") {puts "#{filew.filename}"} filew.cancel_button.signal_connect("clicked") {filew.destroy} filew.filename = "penguin.png" filew.show @filename = filew.filename #(1) end 実は、これだけでは、ファイルセレクションのOKボタンが押されることもなく parent_buttonのclickedシグナル発生時の処理が終了してしまいます。 したがって、(1)の値は想定したとおりにはならないはずです。 これを防ぐためには、以下のようなコードを入れます。 parent_button.signal_connect("clicked") do filew = Gtk::FileSelection.new("File selection") filew.signal_connect("destroy") {Gtk.main_quit} filew.ok_button.signal_connect("clicked") { @filename = filew.filename } filew.cancel_button.signal_connect("clicked") {filew.destroy} filew.filename = "penguin.png" filew.show Gtk.main end でも、この書き方は面倒くさいし間違えやすいのでrunを使うというわけです。 上のコードと以下は同等になります。 #試していないので間違えてるかも(^^;)。 parent_button.signal_connect("clicked") do filew = Gtk::FileSelection.new("File selection") filew.filename = "penguin.png" if filew.run == Gtk::Dialog::RESPONSE_OK puts "OK" @filename = filew.filename end end もちろん、ダイアログの特殊な使い方として、signal_connectを扱うのは まったく問題ないですが、最初の例としてはGtk::ColorSelectionDialog と同じ形態のサンプルを先に説明した方が良いと思います。 ちなみに、 Gtk::FileSelection#dir_list,#file_list, #selections, .... 等は、よくhideを使ってコンポーネントを隠すのに使いますので、 その例が載っていたりするとさらに良いかも。 #例えば、選択させたいけどファイル削除とかは一切なしよ、とか #いう指定の時とか、ディレクトリ一覧だけ表示されればよいから #ファイル一覧は表示しないよとか。 -- .:% Masao Mutoh<mu...@hi...> |