Ruby-tk-listbox
Ruby/TK-リストボックスウィジェット
説明
- ラジオボタン*は、通常は長い単一行のテキストアイテムのリストを表示し、ユーザーが1つ以上を選択してリストを閲覧できるようにします。
最初に作成されたとき、新しいリストボックスには要素がありません。 要素は、提供されたメソッドを使用して追加または削除できます。 さらに、リストされた項目から1つ以上の要素を選択できます。
リストボックスウィンドウにすべての要素を一度に表示する必要はありません。 リストボックスでは、標準の_xscrollcommand_および_yscrollcommand_オプションを使用して両方向にスクロールできます。
構文
このウィジェットを作成する簡単な構文は次のとおりです-
TkListbox.new(root) {
.....Standard Options....
.....Widget-specific Options....
}
標準オプション
- バックグラウンド
- ボーダー幅
- カーソル
- 無効
- 輸出選択
- font
- 前景
- 高さ
- ハイライト
- ハイライトカラー
- ハイライト
- オフセット
- 安心
- selectbackground
- selectborderwidth
- selectforeground
- セットグリッド
- フォーカス
- tile
- 幅
- xscrollcommand *yscrollcommand
これらのオプションは前の章で説明されています。
ウィジェット固有のオプション
Sr.No. | Options & Description |
---|---|
1 |
アクティブな要素を描画するスタイルを指定します。 これは、 dotbox 、 none 、または underline のいずれかでなければなりません。 デフォルトは underline です。 |
2 |
ウィンドウの希望する高さを行単位で指定します。 ゼロ以下の場合、ウィンドウに必要な高さは、リストボックス内のすべての要素を保持するのに十分な大きさになります。 |
3 |
変数の参照を指定します。 変数の値は、ウィジェット内に表示される配列です。変数値が変更されると、ウィジェットは自動的に更新されて新しい値を反映します。 |
4 |
選択を操作するためのいくつかのスタイルの1つを指定します。 オプションの値は任意ですが、デフォルトのバインディングでは、 single 、 browse 、 multiple 、または extended のいずれかを想定しています。デフォルト値は browse です。 |
5 |
state ⇒ String リストボックスの2つの状態、 normal または disabled のいずれかを指定します。 リストボックスが無効になっている場合、アイテムは挿入または削除できません。 |
6 |
width ⇒ Integer ウィンドウの希望の幅を文字数で指定します。 フォントの幅が一定でない場合、文字「0」の幅が文字単位から画面単位への変換に使用されます。 ゼロ以下の場合、ウィンドウに必要な幅は、リストボックス内のすべての要素を保持するのに十分な大きさになります。 |
リストボックスアイテムの操作
リストボックスで遊ぶにはさまざまな方法があります-
- listvariable -変数を使用すると、変数(リストを保持する必要がある)をリストボックスにリンクできます。 このリストの各要素は、リストボックス内の1つのアイテムを表す文字列です。 したがって、リストボックス内のアイテムを追加、削除、または再配置するには、他のリストと同じようにこの変数を操作するだけです。
- * insert idx item?item … ?*メソッドは、1つ以上のアイテムをリストに追加するために使用されます。 「idx」は、アイテムを追加する前のアイテムの位置を示す0から始まるインデックスです。 「end」を指定して、リストの最後に新しいアイテムを配置します。
- * delete first?last?*メソッドは、リストから1つ以上のアイテムを削除するために使用されます。 「first」と「last」は、「insert」メソッドによるインデックスです。
- * get first?last?*メソッドは、指定された位置にある単一のアイテムのコンテンツ、または「first」と「last」の間のアイテムのリストを返します。
- size メソッドは、リスト内のアイテムの数を返します。
- curselection メソッドは、ユーザーが現在選択しているリストボックス内のアイテムを見つけるために使用されます。 これは、現在選択されているすべてのアイテムのインデックスのリストを返します。これは空のリストかもしれません。
- * selection clear first?last?*メソッドは、単一のアイテム、または指定されたインデックスの範囲内のアイテムの選択を解除するために使用されます。
- * selection set first?last?*メソッドは、アイテム、または範囲内のすべてのアイテムを選択するために使用されます。
- * xview(args)*メソッドは、ウィジェットのウィンドウ内の情報の水平位置を照会および変更するために使用されます。
- * yview(?args?)*メソッドは、ウィジェットのウィンドウ内のテキストの垂直位置を照会および変更するために使用されます。
指標
リストボックスのメソッドの多くは、引数として1つ以上のインデックスを取ります。 インデックスは、次のいずれかの方法で、リストボックスの特定の要素を指定します-
- number -テキスト項目内の目的の文字の位置を示す10進数。 0は最初の文字を参照し、1は次の文字を参照します。
- アクティブ-ロケーションカーソルを持つ要素を示します。 リストボックスにキーボードフォーカスがある場合、この要素は下線付きで表示され、activateメソッドで指定されます。
- anchor -選択のアンカーポイントを示し、選択アンカーメソッドで設定されます。
- end -リストボックスの終わりを示します。 一部のコマンドでは、これは最後の要素の直後を意味します。他のコマンドの場合、最後の要素を意味します。
イベントバインディング
Ruby/Tkは、リストボックスにMotifのような動作を与えるクラスバインディングを作成します。 リストボックスの動作の多くは、選択を処理する4つの方法のいずれかを選択する_selectmode_オプションによって決定されます。
- 選択モードが single または browse の場合、リストボックスで一度に選択できる要素は最大で1つです。 両方のモードで、要素のボタン1をクリックすると、その要素が選択され、選択されている他のアイテムの選択が解除されます。 *ブラウズ*モードでは、ボタン1で選択をドラッグすることもできます。
- 選択モードが*複数*または*拡張*の場合、不連続な範囲を含む、任意の数の要素を一度に選択できます。 *複数*モードでは、要素のボタン1をクリックすると、他の要素に影響を与えずに選択状態が切り替わります。 *拡張*モードでは、要素のボタン1を押すとそれが選択され、他のすべての選択が解除され、マウスの下の要素にアンカーが設定されます。ボタン1でマウスを下にドラッグすると、選択範囲が拡張され、アンカーとマウスの下の要素の間のすべての要素が含まれます。
ほとんどの人はおそらく、単一選択には_browse_モードを使用し、複数選択には_extended_モードを使用するでしょう。他のモードは、特別な状況でのみ有用と思われます。
上記の動作に加えて、リストボックスに関連する他の多くの追加の動作がありますが、このチュートリアルではカバーしません-
例1
require "tk"
root = TkRoot.new
root.title = "Window"
list = TkListbox.new(root) do
width 20
height 10
setgrid 1
selectmode 'multiple'
pack('fill' => 'x')
end
list.insert 0, "yellow", "gray", "green",
"blue", "red", "black", "white", "cyan",
"pink", "yellow", "orange", "gray"
Tk.mainloop
これは、次の結果を生成します-
例2
以下は、_listvariable_オプションを使用してリスト項目に入力する例です-
require "tk"
$names = %w{ yellow gray green
blue red black white cyan
pink yellow orange gray}
$colornames = TkVariable.new($names)
root = TkRoot.new
root.title = "Window"
list = TkListbox.new(root) do
width 20
height 10
setgrid 1
listvariable $colornames
pack('fill' => 'x')
end
Tk.mainloop
これは、次の結果を生成します-
実施例3
次の例では、リストボックスと共に_TkScrollbar_ウィジェットを使用する方法を説明します。
require "tk"
$names = %w{ yellow gray green
blue red black white cyan
pink yellow orange gray}
$colornames = TkVariable.new($names)
root = TkRoot.new
root.title = "Window"
list = TkListbox.new(root) do
listvariable $colornames
pack('fill' => 'x')
end
list.place('height' => 150,
'width' => 100,
'x' => 10,
'y' => 10)
scroll = TkScrollbar.new(root) do
orient 'vertical'
place('height' => 150, 'x' => 110)
end
list.yscrollcommand(proc { |*args|
scroll.set(*args)
})
scroll.command(proc { |*args|
list.yview(*args)
})
Tk.mainloop
これは、次の結果を生成します-