ボタンonボタン
しばらくぶりに Ruby/Tk を使ってみたら、なんとも奇妙な状況に遭遇。一見なんの問題もないように思ったのだけれど、実行してみると奇妙なことに。
require 'tk'
f = b = fb = []
3.times do |i|
f[i] = TkFrame.new.pack
3.times do |j|
k = i * 3 + j
b[k] = TkFrame.new(f[i]).pack('side' => 'left')
b[k] = TkButton.new(fb[k], 'text' => "#{k + 1}", 'width' => 7).pack
end
end
Tk.mainloop
なぜか一行目だけボタンの上にボタンが表示されてしまう。二行目以降は問題ないのに。
あれこれしている中でふと次のようにしてみたら、なぜか解消された。謎。まあ、こういう例は pack を使わずに grid を使うべきといってしまえば、それまでなのだけれど。
require 'tk'
f = Array.new(3)
fb = b = Array.new(9)
3.times do |i|
f[i] = TkFrame.new.pack
3.times do |j|
k = i * 3 + j
fb[k] = TkFrame.new(f[i]).pack('side' => 'left')
b[k] = TkButton.new(fb[k], 'text' => "#{k + 1}", 'width' => 7).pack
end
end
Tk.mainloop
| 固定リンク
コメント