Ruby/TkではTkTextクラスが相当します.
使用例を示します.
#!/usr/local/bin/ruby
require 'tk'
text = TkText.new(nil)
text.pack('side' => 'top', 'fill' => 'both')
button = TkButton.new(nil, 'text' => 'print',
'command' => proc{print text.value, "\n"})
button.pack('side' => 'left', 'fill' => 'both')
quitbutton = TkButton.new(nil, 'text' => 'quit',
'command' => proc{exit})
quitbutton.pack('side' => 'right', 'fill' => 'both')
Tk.mainloop
上記プログラムの実行例です.たとえば下のようになります.
この後,printボタンを押すと,プロンプトに入力した文字列が出力されます.
TkEntryクラスのインスタンス変数の例を以下に示します.実際はもっとたくさんありますが,筆者の勉強不足の為,一部だけ掲載します.
| インスタンス変数名 | 役割 |
|---|---|
| background | 背景色. |
| foreground | 前景色. |
| insertbackground | カーソルの背景色. |
| insertborderwidth | カーソルのまわりの境界線の幅. |
| insertofftime | カーソル点滅のoffの時間(単位ミリ秒). |
| insertontime | カーソル点滅のonの時間(単位ミリ秒). |
| justify | 文字列をよせる側."left","center","right"で指定. |
| borderwidth | 枠の幅.整数値で指定. |
| cursor | マウスカーソルの形. |
| highlightcolor | ウィジェットにフォーカスがある時の枠の色. |
| highlightthickness | ウィジェットにフォーカスがある時の枠の幅. |
| relief | ウィジェットの凹凸.'raised'または'sunken'で指定. |
| wraplength | 折り畳むときの1行の文字数. |
| xscrollcommand | 横スクロールバーを連動させるときに使用します.詳説は後節で. |
| yscrollcommand | 縦スクロールバーを連動させるときに使用します.詳説は後節で. |
| state | ボタンの状態です.'normal','active'または'disabled'で指定します.'disabled'にすると,内容が変更できません. |
| spacing1 | 行の上の間隔.ピクセル値で指定します. |
| spacing2 | 折り畳まれた行の2行目以降の前の行との間隔.ピクセル値で指定します. |
| spacing3 | 行の下の間隔.ピクセル値で指定します. |
| underline | 文字の下に下線を引くか指定します.論理値で指定します. |
| height | ウィジェットの高さ. |
| width | ウィジェットの幅. |
| wrap | 文の折り返し方法.'none','char'または'word'で指定. |
| value | テキスト全体の内容. |
TkTextクラスには多くのメソッドがあります.その一部を紹介しましょう.
#!/usr/local/bin/ruby
require 'tk'
text = TkText.new(nil,
'width' => 50,
'height' => 10)
text.pack('side' => 'top', 'fill' => 'both')
text.insert('end', '===================================')
button1 = TkButton.new(nil, 'text' => 'insert',
'command' => proc{text.insert('1.12', 'ここに文字列を入れてみました.')})
button1.pack('side' => 'left', 'fill' => 'both')
button2 = TkButton.new(nil, 'text' => 'delete',
'command' => proc{text.delete('1.12', 'end')})
button2.pack('side' => 'left', 'fill' => 'both')
quitbutton = TkButton.new(nil, 'text' => 'quit',
'command' => proc{exit})
quitbutton.pack('side' => 'right', 'fill' => 'both')
Tk.mainloop
このプログラムを実行すると,最初次のようになります.
そしてinsertボタンを2度押すと次のようになります.
さらにdeleteボタンを押すと次のようになります.
このようにinsertメソッドやdeleteメソッドでテキストの任意の箇所に挿入したり,好きな範囲で削除できます.
最後に簡単にメソッドを紹介します.
| メソッド名(引数) | 機能 |
|---|---|
| insert(index, string) | indexにstringを挿入する. |
| delete(index1, index2) | index1からindex2の直前までの内容を削除する. |
| get(index1, index2) | index1からindex2の範囲の内容を返す. |
また,インデックスの書式の例は以下のとおりです.
| 書式 | 意味 |
|---|---|
| 'end' | テキストの最後の位置 |
| 'line.char' | line行目のchar文字目.lineは1から始まりcharは0から始まる点に注意. |
| '@x,y' | マウスポインタで示されるウィンドウのx,y座標の値. |