[#39984] ruby/tk のイベントハンドラをまとめて設定するには? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
9 messages
2004/09/01
[#39985] Re: ruby/tk のイベントハンドラをまとめて設定するには?
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/09/01
山本です。
[#39989] TCPSocket.new でスレッドが止まる。 — take_tk <ggb03124@...>
たけ(tk)です。
15 messages
2004/09/02
[#39992] Re: TCPSocket.new でスレッドが止まる。
— nobu@...
2004/09/02
なかだです。
[#39993] Re: TCPSocket.new でスレッドが止まる。
— take_tk <ggb03124@...>
2004/09/02
たけ(tk)です
[#39996] Re: TCPSocket.new でスレッドが止まる。
— Yukihiro Matsumoto <matz@...>
2004/09/02
まつもと ゆきひろです
[#40013] ruby/tkについて — skoba@... (KOBAYASHI Satoshi)
小林@島根大学です。
5 messages
2004/09/07
[#40018] yaml.rbとdate.rbを組み合わせて使った際の問題 — "Keisuke Minami" <keisuke@...>
こんにちは。三並と申します。
14 messages
2004/09/07
[#40020] Re: yaml.rbとdate.rbを組み合わせて使った際の問題
— IWATSUKI Hiroyuki <don@...>
2004/09/07
岩月と申します。
[#40022] Re: yaml.rbとdate.rbを組み合わせて使った際の問題
— nobu@...
2004/09/07
なかだです。
[#40028] Re: yaml.rbとdate.rbを組み合わせて使った際の問題
— Yukihiro Matsumoto <matz@...>
2004/09/07
まつもと ゆきひろです
[#40033] Re: yaml.rbとdate.rbを組み合わせて使った際の問題
— nobu@...
2004/09/08
なかだです。
[#40035] Re: yaml.rbとdate.rbを組み合わせて使った際の問題
— Yukihiro Matsumoto <matz@...>
2004/09/08
まつもと ゆきひろです
[#40021] 動的なクラス名 — "fuji@..." <fuji@...>
藤岡です。
9 messages
2004/09/07
[#40056] Ruby本読書会 — MoonWolf <moonwolf@...>
MoonWolfです。
7 messages
2004/09/18
[ruby-list:39984] ruby/tk のイベントハンドラをまとめて設定するには?
From:
"H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date:
2004-09-01 11:43:13 UTC
List:
ruby-list #39984
山本です。
複数の図形に対して、下のような感じでループでまとめてイベントハンドラを
設定したいと考えています。下のコードは、それぞれクリックしたときに 1, 2, 3 を表示します。
require "tk"
#r = nil
TkCanvas.new {
3.times {|i|
h = i * 50
r = TkcRectangle.new(self, 100 + h, 100 + h, 200 + h, 200 + h, :fill => :white)
r.bind "ButtonPress-1", proc { p r.id }
}
pack
}
Tk.mainloop
ところが、コメントを外すと(つまり、外側のスコープに同名の変数があると)常に 3 しか
表示しなくなります。理由は http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Proc
でわかったのですが、Ruby2 では r はブロックローカルでなくなると聞いたので、コメントを
外さなくても常に 3 が表示されるようになると思います。
Javaだと
for (int i = 0; i < 3; ++i) {
final Rectangle r = .....
....addActionListener(new ActionListener(){
public void actionPerformed() {
print r.toString();
}
}
}
とすれば、ループごとの r が actionPerformed にバインドされるのですが、ruby で将来にわたって
安全なやりかたというのは、どういった形になりますか?
-----------------------
生成と同時に bind するなら下のでいいのですが、今回は生成後に bind するということでよろしく
お願いします。bind に渡すコマンドで、クリックした図形のインスタンスが変えるようなものを
探したのですが、見つけられませんでした。("%W"はキャンバスが返るし)
require "tk"
TkCanvas.new {
3.times {|i|
h = i * 50
TkcRectangle.new(self, 100 + h, 100 + h, 200 + h, 200 + h, :fill => :white) {
bind "ButtonPress-1", proc { p self.id }
}
}
pack
}
Tk.mainloop