リスト : スピンボックス use strict; use warnings; use Tkx; my $top = Tkx::widget->new('.'); Tkx::option_add('*font', ['', 12]); my $s1 = $top->new_spinbox(-from => 1, -to => 10, -increment => 1, -width => 10); my $s2 = $top->new_spinbox(-from => 1, -to => 5, -increment => 0.5, -format => '%05.2f', -width => 10); my $s3 = $top->new_spinbox(-values => ['apple', 'banana', 'cherry', 'grape', 'orange'], -state => 'readonly', -width => 10); $s1->g_pack(-padx => 5, -pady => 5); $s2->g_pack(-padx => 5, -pady => 5); $s3->g_pack(-padx => 5, -pady => 5); Tkx::MainLoop();
1. 2.
3.
N.M | N 行の M 文字目 |
@x,y | テキスト内の (x,y) の位置にある文字 |
end | テキスト末尾 |
マーク名 | その名前のマークをつけた位置 |
タグ名.first | その名前のタグの最初の位置 |
タグ名.last | その名前のタグの最後の位置 |
+Nchars, -Nchars | そこから N 文字先、手前 |
+Nlines, -Nlines | そこから N 行先、手前 |
linestart, lineend | その行の先頭、末尾 |
wordstart, wordend | その単語の先頭、末尾 |
リスト : テキストファイルを表示する use strict; use warnings; use utf8; use File::Basename; use Tkx; # メインウィンドウ my $top = Tkx::widget->new('.'); Tkx::option_add('*font', ['Terminal', 10]); Tkx::option_add('*tearOff', 0); $top->g_wm_title('Text Viewer'); # テキストウィジェット my $t0 = $top->new_text(-wrap => 'word'); $t0->g_pack(-side => 'left', -expand => 1, -fill => 'both'); # スクロールバー my $sb = $top->new_scrollbar(-command => [$t0, 'yview']); $sb->g_pack(-side => 'left', -fill => 'y'); $t0->configure(-yscrollcommand => [$sb, 'set']); # ファイルの読み込み my $path_name = '.'; sub load_file { my $filename = Tkx::tk___getOpenFile(-filetypes => "{Perl {.pl}} {Text {.txt}} {ALL {*}}", -initialdir => $path_name ); if ($filename) { $path_name = dirname($filename) . '/'; # 前のドキュメントを消去 $t0->delete('1.0', 'end'); # ファイルのリード open my $in, "<:utf8", "$filename" or die "Can't open $filename\n"; while (<$in>) { $t0->insert('end', $_); } close($in); $t0->g_focus(); } } # メニューの設定 my $m = $top->new_menu(-type => 'menubar'); $top->configure(-menu => $m); my $m1 = $m->new_menu; $m->add_cascade(-menu => $m1, -label => 'File', -under => 0); $m1->add_command(-label => 'Open', -under => 0, -command => \&load_file); $m1->add_separator; $m1->add_command(-label => 'Exit', -under => 0, -command => sub { exit; }); Tkx::MainLoop();
テキストウィジェット
ファイルの表示
リスト : 行番号の挿入と削除 use strict; use warnings; use utf8; use File::Basename; use Tkx; # メインウィンドウ my $top = Tkx::widget->new('.'); Tkx::option_add('*font', ['Terminal', 10]); Tkx::option_add('*tearOff', 0); $top->g_wm_title('Text Viewer'); # テキストウィジェット my $t0 = $top->new_text(-wrap => 'word'); $t0->g_pack(-side => 'left', -expand => 1, -fill => 'both'); # スクロールバー my $sb = $top->new_scrollbar(-command => [$t0, 'yview']); $sb->g_pack(-side => 'left', -fill => 'y'); $t0->configure(-yscrollcommand => [$sb, 'set']); # 行番号の処理 my $number_flag = 0; sub change_number { my $line = $t0->index('end'); my $i; if ($number_flag) { for ($i = 1; $i < $line; $i++) { $t0->insert("$i.0", sprintf("%6d:", $i)); } } else { for ($i = 1; $i < $line; $i++) { $t0->delete("$i.0", "$i.7"); } } } # ファイルの読み込み my $path_name = '.'; sub load_file { my $filename = Tkx::tk___getOpenFile(-filetypes => "{Perl {.pl}} {Text {.txt}} {ALL {*}}", -initialdir => $path_name ); if ($filename) { $path_name = dirname($filename) . '/'; # 前のドキュメントを消去 $t0->delete('1.0', 'end'); # ファイルのリード open my $in, "<:utf8", "$filename" or die "Can't open $filename\n"; while (<$in>) { $t0->insert('end', $_); } close($in); $t0->g_focus(); &change_number if $number_flag; } } # メニューの設定 my $m = $top->new_menu(-type => 'menubar'); $top->configure(-menu => $m); my $m1 = $m->new_menu; $m->add_cascade(-menu => $m1, -label => 'File', -under => 0); $m1->add_command(-label => 'Open', -under => 0, -command => \&load_file); $m1->add_separator; $m1->add_checkbutton(-label => 'Number', -under => 0, -variable => \$number_flag, -command => \&change_number); $m1->add_separator; $m1->add_command(-label => 'Exit', -under => 0, -command => sub { exit; }); Tkx::MainLoop();
$m1->add_checkbutton(-label => 'Number', -under => 0, -variable => \$number_flag, -command => \&change_number);
行番号の表示
mark_set(markname, index); | マークの設定 |
mark_unset(*markname); | マークの削除 |
mark_names(); | 定義されているすべてのマークを返す |
mark_gravity(markname, left_or_right); | マークのつき方を left と right で指定 |
mark_next(index); | index より後ろにあるマークを返す |
mark_previous(index); | index より前にあるマークを返す |
$t0->mark_set('first', '1.3');
$t0->insert('first', '1234');
$t0->insert('insert', 'string');
tag_add(tagname, index1, index2); | 指定した範囲に対して、タグ tagname を設定 |
tag_delete(*tagname); | タグの削除 |
tag_names(index); | index の位置にある文字と関連するすべてのタグを返す |
tag_cget(tagname, option); | タグ tagname のオプションの値を返す |
tag_configure(tagname, option, value); | タグ tagname のオプションを設定する |
tag_bind(tagname, event, callback); | タグ tagname にバインドを設定する |
リスト : 行番号に色をつける sub change_number { my $line = $t0->index('end'); my $i; if ($number_flag) { for ($i = 1; $i < $line; $i++) { $t0->insert("$i.0", sprintf("%6d:", $i), 'LINENUM'); } } else { for ($i = 1; $i < $line; $i++) { $t0->delete("$i.0", "$i.7"); } } }
$t0->tag_configure('LINENUM', -foreground => 'red');
$t0->insert(index, string, tagname, ...);
行番号を赤く表示する
-window | ウィジェット名 |
-create | ウィジェットを生成するコマンドを指定(window を指定しない場合のみ有効) |
-align | 上下方向の揃え指定 (baseline, top, bottom, center) |
-stretch | 上下方向の引き延ばし |
-padx, -pady | スペースの指定 |
リスト : ラベル (画像) の挿入 use strict; use warnings; use utf8; use File::Basename; use Tkx; # メインウィンドウ my $top = Tkx::widget->new('.'); Tkx::option_add('*font', ['Terminal', 10]); Tkx::option_add('*tearOff', 0); $top->g_wm_title('Text Viewer'); # テキストウィジェット my $t0 = $top->new_text(-wrap => 'word'); $t0->g_pack(-side => 'left', -expand => 1, -fill => 'both'); $t0->tag_configure('LINENUM', -foreground => 'red'); # スクロールバー my $sb = $top->new_scrollbar(-command => [$t0, 'yview']); $sb->g_pack(-side => 'left', -fill => 'y'); $t0->configure(-yscrollcommand => [$sb, 'set']); # 行番号の処理 my $number_flag = 0; sub change_number { my $line = $t0->index('end'); my $i; if ($number_flag) { for ($i = 1; $i < $line; $i++) { $t0->insert("$i.0", sprintf("%6d:", $i), 'LINENUM'); } } else { for ($i = 1; $i < $line; $i++) { $t0->delete("$i.0", "$i.7"); } } } # ファイルの読み込み my $path_name = '.'; sub load_file { my $filename = Tkx::tk___getOpenFile(-filetypes => "{Perl {.pl}} {Text {.txt}} {ALL {*}}", -initialdir => $path_name ); if ($filename) { $path_name = dirname($filename) . '/'; # 前のドキュメントを消去 $t0->delete('1.0', 'end'); # ファイルのリード open my $in, "<:utf8", "$filename" or die "Can't open $filename\n"; while (<$in>) { $t0->insert('end', $_); } close($in); $t0->g_focus(); &change_number if $number_flag; } } # 画像を選んで挿入する my $image_path = '.'; sub insert_image { my $image_name = Tkx::tk___getOpenFile(-filetypes => "{GIF {.gif}} {PPM {.ppm}} {ALL {*}}", -initialdir => $image_path); if ($image_name) { my $image = Tkx::image_create_photo(-file => $image_name); my $label = $top->new_label(-image => $image, -relief => 'raised', -borderwidth => 4); $t0->window_create('insert', -window => $label, -align => 'baseline'); $image_path = dirname($image_name) . '/'; } } # メニューの設定 my $m = $top->new_menu(-type => 'menubar'); $top->configure(-menu => $m); my $m1 = $m->new_menu; $m->add_cascade(-menu => $m1, -label => 'File', -under => 0); $m1->add_command(-label => 'Open', -under => 0, -command => \&load_file); $m1->add_separator; $m1->add_checkbutton(-label => 'Number', -under => 0, -variable => \$number_flag, -command => \&change_number); $m1->add_separator; $m1->add_command(-label => 'Image', -under => 0, -command => \&insert_image); $m1->add_separator; $m1->add_command(-label => 'Exit', -under => 0, -command => sub { exit; }); Tkx::MainLoop();
$m1->add_command(-label => 'Image', -under => 0, -command => \&insert_image);
Tcl/Tk Logo を挿入
テキストの編集
-image | 表示する画像 |
-name | 画像を参照するための名前を付ける |
-align | 上下方向の揃え指定(baseline, top, bottom, center) |
-padx, -pady | スペースの指定 |
リスト : 画像の挿入 sub insert_image { my $image_name = Tkx::tk___getOpenFile(-filetypes => "{GIF {.gif}} {PPM {.ppm}} {ALL {*}}", -initialdir => $image_path); if ($image_name) { my $image = Tkx::image_create_photo(-file => $image_name); $t0->image_create('insert', -image => $image, -align => 'baseline'); $image_path = dirname($image_name) . '/'; } }
Tcl/Tk Logo を挿入