mieki256's diary



2015/12/10(木) [n年前の日記]

#1 [ruby] Ruby/Tkで拡張Tkを使えるようにするために少し試したり

Rubyを使ってGUIの何かしらを作れる Ruby/Tkというライブラリがあるのだけど。これは、Tcl/TkのTkを、Rubyから呼び出して使えるようにしたもの、という説明で合ってるのか合ってないのかちょっと分からんけど大体そんな感じのもので。

Windows環境なら、 _RubyInstaller を使って Ruby をインストールする際、「Ruby/Tkもインストールする?」と聞かれるからチェックを入れとけば Ruby/Tk が使えるのだけど。しかしこの Ruby/Tk は、拡張Tkとやらが含まれてない版らしく。

せっかくだから拡張Tkを使えるようにできないか少し試してみたり。

Ruby 1.9.3の場合。 :

Ruby 1.9.3 なら、以下の解説記事通りにやったら使えるようになった。

_島ぶくろ [Ruby] Ruby/Tk、拡張Tkをインストールする方法 (2012年7月現在)

_RubyTk - Ruby/Tk-Kit から、「include some Tcl/Tk extensions : tcltklib.so-w-exts-20100523-ruby191-mingw-for-RubyInstaller191」をDLして、tcltklib.so にリネーム。

Ruby1.9.3インストールフォルダ\lib\ruby\1.9.1\i386-mingw32\ 内の tcltklib.so を tcltklib.so.org にリネームしてバックアップ。先ほどDLした tcltklib.so を上記フォルダにコピー。

これで、拡張Tkが使えるようになった模様。

Ruby 2.0以降の場合その1。 :

Ruby 2.0以降は、別途 ActiveTclをインストールして、そちらの拡張Tkを使う方法があるらしい。

_ActiveTcl Downloads - ActiveState から、ActiveTcl8.6.4.1.299124-win32-ix86-threaded.exe をDLしてインストール。今回は D:\Tcl にインストールした。

Ruby2.0インストールフォルダ\lib\ruby\2.0.0\tkextlib\ 内に setup.rb というファイルがあるので、これもリネームしつつコピーしてバックアップ。その後、setup.rb を編集。以下を追加した。
[
'D:\Tcl\lib\teapot\package\tcl\lib',
'D:\Tcl\lib\teapot\package\win32-ix86\lib'
].each do |dir|
  TkPackage.add_path(File.expand_path(dir))
end
これで、拡張Tkが使えるようになった。

ただ、このやり方では ocra を使ってスクリプトを exe化しようとした時にハマる。

_2010/12/22の記事 のコメントで教えてもらった、以下の指定で exe化してみたものの。
ocra Rubyスクリプト.rb --windows Rubyインストールフォルダ\lib\tcltk\ --no-autoload --add-all-core

この指定で生成された exe を他のPCに持っていっても起動しなかった。「--windows」指定を外して、DOS窓が表示されるexeを生成して確認してみたら、やはり拡張Tkが見つからなくて落ちていた。

つまり、この方法は、あくまで自分の環境で動けばそれでいい、他のPCにスクリプトは持っていかない、といった場面でしか使えないかもしれず。

Ruby 2.0以降の場合その2。 :

ActiveTcl内のファイルをRubyインストールフォルダにコピーすることでも拡張Tkを使えるようになるらしい。おそらくこちらのほうが、ocra で exe化するなら都合がいいはず。ただ、ファイル更新等忘れてしまう可能性がありそうな点はデメリットかもしれず。

まず、Ruby2.0インストールフォルダ\lib\ruby\2.0.0\tkextlib\setup.rb を編集して、方法その1で追加した部分を削除。

ActiveTclインストールフォルダ\lib\teapot\package\win32-ix86\lib\ 以下のフォルダやファイルを、Ruby2.0インストールフォルダ\lib\tcltk\ 以下にごっそりコピー。

Ruby2.0インストールフォルダ\lib\tcltk\ 以下に元々入ってたフォルダ群は以下。
dde1.3
reg1.2
tcl8
tcl8.5
tk8.5

ActiveTclインストールフォルダ\lib\teapot\package\win32-ix86\lib\ 以下に入ってたフォルダやファイル群は以下。
img_base1.4.3
img_bmp1.4.3
img_gif1.4.3
img_ico1.4.3
img_jpeg1.4.3
img_pcx1.4.3
img_pixmap1.4.3
img_png1.4.3
img_ppm1.4.3
img_ps1.4.3
img_sgi1.4.3
img_sun1.4.3
img_tga1.4.3
img_tiff1.4.3
img_window1.4.3
img_xbm1.4.3
img_xpm1.4.3
Itk3.4
jpegtcl8.4
Memchan2.3
Mk4tcl2.4.9.7.1
pngtcl1.4.12
sqlite33.8.10.2
Tclx8.4
tdom0.8.3
tifftcl3.9.4
Tktable2.11
tls1.6.5
treectrl2.4.1
Trf2.1.4
vfs1.4.2
zlibtcl1.2.8
pkgIndex.tcl

ここまで試したところ、このやり方でも拡張Tkが使えるようになった。

また、ocra で exe化したものを他のPCにコピーしても動いてくれた。

参考ページ。 :

余談。 :

それにしても、Ruby/Tkを使うのは面倒臭いな…。いや、拡張Tkを使おうとさえしなければ問題は起きないのだろうけど。

以上、1 日分です。

過去ログ表示

Prev - 2015/12 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project