[#38724] 祝日判定用メソッド — Take_tk <ggb03124@...>

たけ(tk)です

19 messages 2003/11/02

[#38756] ruby-dev summary 21730-21822 /draft — Minero Aoki <aamine@...>

青木です。

14 messages 2003/11/05

[ruby-list:38795] Re: How to trap widget command in Ruby/Tk

From: Hidetoshi NAGAI <nagai@...>
Date: 2003-11-13 04:03:08 UTC
List: ruby-list #38795
永井@知能.九工大です.

From: Tomoyuki Kosimizu <greentea@fa2.so-net.ne.jp>
Subject: [ruby-list:38794] How to trap widget command in Ruby/Tk
Date: Thu, 13 Nov 2003 11:08:00 +0900
Message-ID: <20031113.111329.59466538.greentea@fa2.so-net.ne.jp>
> Ruby/Tkで教えていただきたいことがあります。
> Tcl/Tkで:
> set t .t
> text $t -width 20 -height 5
> rename $t $t\_
> proc $t {command args} "
>     set result \[eval uplevel \[list $t\_ \$command \$args\]\]
>     puts \"\$command \$args\"
>     return \$result"
> pack $t
> というコードがあります。これと同じことがRuby/Tkでも可能でしょうか?

Ruby/Tk は Tcl/Tk のインタープリタを直接駆動していますから,
配下の Tcl/Tk で可能なことなら,Tcl/Tk 拡張ライブラリの使用も含めて,
できないことは存在しないはずです.

上記の例を実装するならこんな感じかと思います.
-----------------------------------------------
require 'tk'

class TkTrappedText < TkText
  def trap_callback(cmd, args)
    p [cmd, args]
  end

  def create_self(keys)
    super(keys)
    Tk.tk_call('rename', @path, @path + '_')
    @cmdid = install_cmd(proc{|cmd, args| 
      trap_callback(cmd, tk_split_simplelist(args))
    })
    Tk.ip_eval(<<EOP)
proc #{@path} {command args} {
  set result [eval uplevel [list #{@path + '_'} $command $args]]
  #{@cmdid} $command $args
  return $result
}
EOP
  end
end

t = TkTrappedText.new.pack
Tk.mainloop
-----------------------------------------------

実用上は,渡されるコマンド情報を Ruby 的に解釈する処理を
trap_callback メソッドに加えなければならないでしょう.
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai@ai.kyutech.ac.jp

In This Thread

Prev Next