テキスト(Text)

エントリはユーザが任意の文字列を入力するためのウィジェットです.テキストエディタの作成に広く用いられます. テキストウィジェットは非常に多くの機能を備えたウィジェットで,その全てを説明するのは大変なので,ここでは基本的な部分にだけに絞って説明します.より詳しく調べたい方はTcl/Tkのマニュアルを御覧になることをおすすめします.

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) indexstringを挿入する.
delete(index1, index2) index1からindex2の直前までの内容を削除する.
get(index1, index2) index1からindex2の範囲の内容を返す.

また,インデックスの書式の例は以下のとおりです.

indexの書式(抄)
書式 意味
'end' テキストの最後の位置
'line.char' line行目のchar文字目.lineは1から始まりcharは0から始まる点に注意.
'@x,y' マウスポインタで示されるウィンドウのx,y座標の値.

戻る