logo       

[ruby-list:42428] toplevel ウィジェットにイベントがわたらない?: msg#00082

lang.ruby.japanese

Subject: [ruby-list:42428] toplevel ウィジェットにイベントがわたらない?

九工大、木村といいます。

ruby/tkのプログラムでどうにもわからないのがあります。
解決の糸口でも教えていただけるとたいへん助かります。

次のプログラムsample.rbを作成し、ターミナルから

$ ruby sample.rb

で起動します。表れたウィンドウのエントリー上でマウスをクリック、しかし、
キーボードをタイプしてもエントリーには何も表示されず、
ターミナル側にも反応がありません。ボタンは有効に機能します。


#!/usr/bin/ruby
require 'tk'
top=TkToplevel.new {title 'toplevel'}
top.bind("Any-Key") {|e| p e}
entry=TkEntry.new(top)
button=TkButton.new(top) {
text 'exit'
command {exit(0)}
}
entry.pack #1
button.pack #2
Tk.mainloop


不思議なのは、entry と button のパックの順番(上の#1と#2)を入れ換える
と、エントリーには入力したキーが表示され、ターミナル側にはキーイベント
の情報がプリントされることです。

さらに不思議なのは、プログラムが期待どおりに動かないのはわたしの回りで
は1種類のPC(HP compaq dc5000)だけで、悪いことにそのPCと同じ構成のPCが
100台、大学の一斉授業で学生が使うPCなんです。

PCは debian/sarge をインストールしており、カーネルは 2.6.8-2-686 を
apt-get しました。

$ dpkg -l \*ruby\* | grep ii
ii libreadline-ru 1.8.2-1 Readline interface for Ruby
ii libreadline-ru 1.8.2-7sarge2 Readline interface for Ruby 1.8
ii libruby1.8 1.8.2-7sarge2 Libraries necessary to run Ruby 1.8
ii libtcltk-ruby 1.8.2-1 Tcl/Tk interface for Ruby
ii libtcltk-ruby1 1.8.2-7sarge2 Tcl/Tk interface for Ruby 1.8
ii ruby 1.8.2-1 An interpreter of object-oriented scripting
ii ruby-elisp 1.8.2-1 Emacs-lisp ruby-mode for Ruby
ii ruby1.8 1.8.2-7sarge2 Interpreter of object-oriented scripting lan
ii ruby1.8-elisp 1.8.2-7sarge2 ruby-mode for Emacsen
ii ruby1.8-exampl 1.8.2-7sarge2 Examples for Ruby 1.8

$ COLUMNS=200 dpkg -l kernel-image\* | grep ii
ii kernel-image-2.6.8-2-686 2.6.8-16sarge1
Linux kernel image for version 2.6.8 on PPro/Celeron/PII/PIII/P4.

どんな情報、コメントでも歓迎します。
よろしくお願いします。




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise