[ruby-list:49637] Re: RubyTkのgridをスクロールさせたい

From: Hidetoshi NAGAI <nagai@...>
Date: 2013-10-07 05:43:35 UTC
List: ruby-list #49637
永井@知能.九工大です.

From: dezawa <dezawa@aliadne.net>
Subject: [ruby-list:49636] RubyTkのgridをスクロールさせたい
Date: Mon, 07 Oct 2013 13:04:44 +0900
Message-ID: <525232DC.9030200@aliadne.net>

> html同士だから良いかな、とRubyWebDialogsをちょっと眺めて、
> tableをDRYにするのが厄介そうだったので止めました。
> 調べていたらRubyTk TkTableと言うのがあることに気がつき、
> それで少し遊んで見ました。
> 見せるだけなら使いやすそう、と思われたのですが、リストboxとか
> チェックboxとか入れられないのですね。

path.window_configure( ..., :window=>widget ) で埋め込めませんか?
今はテストできる環境にはないのですが,
<ruby-source-tree>/ext/tk/sample/tkextlib/tktable/debug.rb
に label widget を埋め込んでいる例があります.
埋め込む widget には特に制約はないはずですから,
frame widget を埋め込んでその上に widget を並べるなども問題ないと思います.

> で、gridをtableに使うか、と思ったのですがスクロールで行き詰まりました。
> 
> TkFrameにgridではめ込んで、frameにscrollをつけようとしたら、
>   unknown option "-yscrollcommand
> え? と見てみると確かにFrameにはscrollは無いのですね。
> 他に適当な物が見つからず、
>   class MyTkFrame < Tk::Frame; include k::Scrollable
> としてみましがた、予想通りだめ。
> 
> 以下を満たすにはどうするのが良いでしょうか。
>   スクロールできるtable
>   cellにWidgetを置ける
>   LinuxでもWindowsでも動く

ruby の source に同梱している sample に,canvas widget の応用例として,
scroll 可能な frame widget class を置いています.
<ruby-source-tree>/ext/tk/sample/scrollframe.rb です.
ただし,これ,ちょっとバグがあるので,"require 'tk'" の後に
"module Tk::RbWidget; end" という定義を加えてください.

中身を見てもらえばわかりますが,そのまま実行すればデモが動きます.
普通に require で読み込めば,Tk::RbWidget::ScrollFrame クラスとして使えます.
ON/OFF 可能なスクロールバー付きの frame widget として,要望を満たすはずです.

<ruby-source-tree>/ext/tk/sample/ の下には
ライブラリとしても役立つかもしれないサンプルスクリプトを含んでますので,
もし良かったら参考にしていただけますと幸いです.
-- 
永井 秀利  (nagai@ai.kyutech.ac.jp)
九州工業大学大学院情報工学研究院知能情報工学研究系知能情報メディア部門助教

In This Thread