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座標の値. |