新井です。

In message "[ruby-list:28594] TkScale#coords, TkScale#get,TkScale#identify 未実装"
  on 08 Mar 2001 22:45:10 +0900,
  Noritsugu Nakamura <nnakamur / mxq.mesh.ne.jp> wrote:
> 
> 中村 のりつぐ です。
> 
> TkScale#coords, TkScale#identify が未実装のようです。
> また TkScale#get が一部しか実装されていないようです。
> (誰が使うの!みたいな機能なんですが…)
> 
> 
> TkScale#coords, TkScale#identify に関しては
> 以下のようにしてみました。


> class TkScale
>   def coords(val)
> 	tk_send "coords", val
>   end
> end

coords の引数は省略可のようです(tcl/tk 8.2 で確認) また、座
標のリストを返すので戻り値を TkComm#tk_split_list で変換して
あげるとよいでしょう。

  def coords(val=None)
    tk_split_list(tk_send "coords", val)
  end

ご存知かも知れませんが None は TkComm::None です。詳細はリファ
レンスをどうぞ(って、どうも読み返すとわかりにくいこと書いて
るなあと実感。やばい;)

> class TkScale
>   def identify(x=None, y=None)
> 	tk_send "identify", x, y
>   end
> end

こちらは逆に引数の省略は不可のようです。引数が範囲外を指すと
き "" を返しますがこのとき nil を返すようにしてみました

  def identify(x, y)
    result = tk_send "identify", x, y
    result == "" ? nil : result
  end

> TkScale#get は scale get [x, y] なのですが、
> x, y がついたときに動作しません。

これは中村のりつぐさんに(^^
# 引数 x, y のうち片方しか使われない点を工夫すると面白いかも

せっかくいろいろやってくださってるようなのでドキュメント引き
継ぎませんか?(共同執筆でも可。サーバーがあればRWikiにしても
よいですが)

--
新井康司 (Koji Arai)



#!/usr/bin/env ruby require "tk" p [Tk::TCL_VERSION, Tk::TK_VERSION, Tk::JAPANIZED_TK] class TkScale def identify(x, y) result = tk_send "identify", x, y result == "" ? nil : result end def coords(val=None) list(tk_send "coords", val) end end scale = TkScale.new { set 50 }.pack Tk.after(100) { x, = scale.coords 0.step(100, 10) {|y| p scale.identify(x, y) } } Tk.mainloop
["8.2", "8.2", false] nil "trough1" "trough1" "trough1" "slider" "slider" "slider" "trough2" "trough2" "trough2" "trough2"