require 'tk'すると、このウィンドウを表示して、無限ループに突入する。
再現方法:
>ruby -rtk
とかで。
>ruby -v -rtk -e 'p Tk::TCL_VERSION, Tk::TK_VERSION, Tk::JAPANIZ ED_TK' ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32] C:/Ruby/lib/ruby/1.8/tk.rb:1102: warning: Inconsistency.`tcltklib' is enabled nativethread-support. But loaded Tcl/Tk libraries are not. (Probably, the inconsistency doesn't cause any troubles.) "8.4" "8.4" false
>\ruby19\bin\ruby -v -rtk -e 'p Tk::TCL_VERSION, Tk::TK_VERSION, Tk::JAPANIZED_TK' ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-mswin32] C:/ruby19/lib/ruby/1.9.1/tk.rb:3282: warning: shadowing outer local variable - key C:/ruby19/lib/ruby/1.9.1/tk.rb:3410: warning: shadowing outer local variable - key C:/ruby19/lib/ruby/1.9.1/tk.rb:3470: warning: shadowing outer local variable - key C:/ruby19/lib/ruby/1.9.1/tk.rb:3710: warning: mismatched indentations at 'end' with 'if' at 3708 C:/ruby19/lib/ruby/1.9.1/tk.rb:4299: warning: shadowing outer local variable - method C:/ruby19/lib/ruby/1.9.1/tk.rb:4338: warning: shadowing outer local variable - v C:/ruby19/lib/ruby/1.9.1/tk.rb:4685: warning: shadowing outer local variable - method C:/ruby19/lib/ruby/1.9.1/tk.rb:4724: warning: shadowing outer local variable - conf C:/ruby19/lib/ruby/1.9.1/tk.rb:4734: warning: shadowing outer local variable - conf C:/ruby19/lib/ruby/1.9.1/tk.rb:29: warning: Inconsistency.`tcltklib' is enabled nativethread-support. But loaded Tcl/Tk libraries are not. (Probably, the inconsistency doesn't cause any troubles.) C:/ruby19/lib/ruby/1.9.1/tk.rb:1233: warning: method redefined; discarding old to_s
ここで固まってしまう。止めると
C:/ruby19/lib/ruby/1.9.1/tk.rb:1340:in `_invoke': Interrupt
from C:/ruby19/lib/ruby/1.9.1/tk.rb:1340:in `<module:TkCore>'
from C:/ruby19/lib/ruby/1.9.1/tk.rb:1108:in `<top (required)>'
from \ruby19\bin\ruby:0:in `require'
って。
g:rubyist:id:ayucatch:20091006:does_not_work_ruby_tk_on_ruby_1_9_1_mswin32
require 'tk'すると、このウィンドウを表示して、無限ループに突入する。
Ruby 1.9.1 (p129) で Ruby/Tk が使えない - ayucat.chのRuby/Rails日記 (新) - Rubyist
ということなので、Tk関連を調べてみた。tk84.dllが見つかった。
| Tk/Tcl単体 | 8.4.2.19 |
| Python (2.5?) と一緒に | 8.4.2.12 |
これが原因か?と思ったけど、関係なかったっぽい。
普通のスクリプトだと頭に
module TkCore; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end
を持ってくると動きます。
[ruby-list:45712] Re: ruby-1.9.1-preview2のruby-tk on OSX
らしい。
module TkCore; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end
でFA?
\ruby19\bin\ruby -v -e 'module TkCore; RUN_EVENTLOOP_ ON_MAIN_THREAD = true; end; require "tk"; p Tk::TCL_VERSION, Tk::TK_VERSION, Tk: :JAPANIZED_TK' ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-mswin32] C:/ruby19/lib/ruby/1.9.1/tk.rb:3282: warning: shadowing outer local variable - key C:/ruby19/lib/ruby/1.9.1/tk.rb:3410: warning: shadowing outer local variable - key C:/ruby19/lib/ruby/1.9.1/tk.rb:3470: warning: shadowing outer local variable - key C:/ruby19/lib/ruby/1.9.1/tk.rb:3710: warning: mismatched indentations at 'end' with 'if' at 3708 C:/ruby19/lib/ruby/1.9.1/tk.rb:4299: warning: shadowing outer local variable - method C:/ruby19/lib/ruby/1.9.1/tk.rb:4338: warning: shadowing outer local variable - v C:/ruby19/lib/ruby/1.9.1/tk.rb:4685: warning: shadowing outer local variable - method C:/ruby19/lib/ruby/1.9.1/tk.rb:4724: warning: shadowing outer local variable - conf C:/ruby19/lib/ruby/1.9.1/tk.rb:4734: warning: shadowing outer local variable - conf C:/ruby19/lib/ruby/1.9.1/tk.rb:29: warning: Inconsistency.`tcltklib' is enabled nativethread-support. But loaded Tcl/Tk libraries are not. (Probably, the inconsistency doesn't cause any troubles.) C:/ruby19/lib/ruby/1.9.1/tk.rb:1233: warning: method redefined; discarding old to_s C:/ruby19/lib/ruby/1.9.1/tk.rb:843: warning: instance variable @cmdtbl not initialized C:/ruby19/lib/ruby/1.9.1/tk.rb:2437: warning: instance variable encoding_table not initialized "8.4" "8.4" false C:/ruby19/lib/ruby/1.9.1/tk.rb:2759: warning: instance variable @encoding not initialized C:/ruby19/lib/ruby/1.9.1/tk.rb:2759: warning: instance variable @encoding not initialized C:/ruby19/lib/ruby/1.9.1/tk.rb:2759: warning: instance variable @encoding not initialized
とな。
One-Click Installer, Ruby/Tk |
いつもお世話になってます。
今回GUIアプリケーションを作りたくて、ActiveTcl→http://www.activestate.com/からバージョン8.5をインストールしました。
[...]
少し複雑なプログラムになると「Ruby interpreter(CUI)1.8.6[i386-mswin32]は動作を停止しました」というダイアログが出てきてしまいます。コマンドラインのほうには、alloc: invalid block:XXXXXX: ef ef 30 (Xの部分は何かの16進数)
[...]
Ruby/Tkの一部が動かない
ということらしい。ayucatもよく遭遇。必ずしも、Tcl/Tk 8.5でなくても8.4でもなるのを経験している。けど、深くまで追っていない。