From: Hidetoshi NAGAI Date: 2003-10-26T06:51:34+09:00 Subject: [ruby-list:38663] Re: Ruby/Tkの終了時の挙動 永井@知能.九工大です. From: Shigeaki Kinoshita Subject: [ruby-list:38656] Ruby/Tkの終了時の挙動 Date: Sat, 25 Oct 2003 21:42:10 +0900 Message-ID: <20031025210902.4C8D.QZT05560@nifty.ne.jp> > Ruby/Tkを使い始めました。 > 以下のプログラムを試してみたところ終了時に不具合があります。 > 設定の問題なのかと思い、過去ログなど探してみたのですが、 > 解決方法を見つけられずにおります。 > 何か情報お持ちの方おられましたら、ご教示頂けないでしょうか。 > > --------------------------------------------------------- > #テストプログラム(tkversion.rb) > require 'tk' > TkButton.new(nil, > 'text'=>Tk::TK_VERSION, > 'command'=>proc{exit}).pack > Tk.mainloop > --------------------------------------------------------- この終了方法の場合,Tk 側のイベント処理中に 親である Ruby が終了するようになっているため, Win と Unix 系とでの Tk の実装方法の違いにより Tk の終了処理が適切に行えていないのかもしれません. このスクリプトの場合,Tk.mainloop が適切に終了すれば スクリプト自体も正常に終了するわけですから, ボタンを押した際に root widget を破壊するように すればいいと思われます. # root widget 破壊 -> Tk のイベントループの正常終了 # -> Ruby 側に制御が戻る -> Ruby 終了 root widget を破壊するには例えば TkRoot.new.destroy ですが,この場合にやりたいことにイメージとして近いのは Tk.exit (実体は Tk 上での 'destry .' の実行) でしょうね. # いずれも root widget を破壊しているだけです. お手数ですが,この方法で試してみていただけますか. # 終了のためだけに root widget オブジェクトを作るのも # なんとなく嫌ですね. # root widget は一つの Tk インタープリタに一つだけですから, # TkRoot.destroy メソッドを追加しておくようにします. -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp