2011-09-19 16 views
0

リストにウィジェットを持たせることができるPerl Tkのリストボックスのタイプがあれば誰にも分かりますか?たとえば、ユーザーがチェックまたはチェックを外すことができるCheckbuttonウィジェットを含む列の1つを持つ複数列のリストボックスが必要です。埋め込みウィジェットを持つPerl Tkリストボックス?

答えて

1

を私の知る限りでは、標準のリストボックスウィジェットは唯一の内容として、文字列の1行をサポートしています。 私たちはウィジェットを含むことができる、より強力なリストボックスを構築することができますので、不満はありません!

ここに私がプログラム用に書いたコードがあります。そして、その結果は、以下に示すPIC(私はそれを描くので、私は関連文書から直接それを取る)のようなものです enter image description here

TIPS:
- 私が書いたコードはPerlの使用のTcl :: Tkのモジュールであり、あなたは簡単にPerl/Tkに変更することができます
- 写真が示すように、6ウィジェットは配列@itemを構築し、6 @item配列は配列@cur_itemsを構築し、@cur_itemsから始めて任意のウィジェットを見つけることができます(あなたがすでにシーケンスを知っているので)
- これらのウィジェットをきれいにするために追加のフレームを使用しますが、2つのウィジェットを整理したい場合は無視することができます(フレームを使用することをお勧めします)
- 無視するコーダーが重いプログラミング圧力の下で素敵な名前を付けるためにウィジェットの名前再、subsubwidgetまたはsubsubdateのように、それは難しいです:)

# init - create six items 
# each of them contains 5 widgets 
for (1..6) { 
    my @items =(); 

    # create a frame for each item 
    # 0 --- LabelFrame --- file name 
    # 1 --- label --- icon 
    # 2 --- text --- path dir 
    # 3 --- label --- date 
    # 4 --- label --- size 
    # 5 --- button --- preview info 
    my $item = $toplevel->Frame(
     -bg => 'white', 
    )->pack(
     -in => $toplevel, 
     -anchor => 'nw', 
     -pady => 10, 
    ); 
    my $widget = $item->LabelFrame(
     -bg => 'white', 
     -fg => 'blue', 
    )->pack(
     -in => $item, 
     -side => 'left', 
     -anchor => 'nw', 
    ); 
    push (@items, $widget); 
    # file/dire type icon 
    my $subicon = $widget->Label(
     -bg => 'white', 
    ); 
    $subicon->pack(
     -in => $widget, 
     -side => 'left', 
     -anchor => 'center' 
    ); 
    push (@items, $subicon); 
    my $subwidget = $widget->Frame(
     -bg => 'white', 
    )->pack(
     -in => $widget, 
     -side => 'left', 
    ); 
    # file path 
    my $subtext = $subwidget->Text(
     -height => 2, 
     -width => 39, 
     -bg => 'white', 
     -borderwidth => 0, 
     -wrap => 'char', 
    )->pack(
     -in => $subwidget, 
     -anchor => 'nw', 
    ); 
    push (@items, $subtext); 
    $subtext->configure(-state => 'disabled'); 
    # date and size 
    my $subsubwidget = $subwidget->Frame(
     -bg => 'white', 
    )->pack(
     -in => $subwidget, 
     -anchor => 'nw', 
    ); 
    my $subsubdate = $subsubwidget->Label(
     -bg => 'white', 
     -text => '', 
    )->pack(
     -in => $subsubwidget, 
     -anchor => 'nw', 
     -side => 'left', 
    ); 
    push (@items, $subsubdate); 
    my $subsubsize = $subsubwidget->Label(
     -width => 12, 
     -bg => 'white', 
    )->pack(
     -in => $subsubwidget, 
     -anchor => 'nw', 
     -side => 'left', 
    ); 
    push (@items, $subsubsize); 
    # more info 
    my $infobtn = $item->Button(
     -text => '>', 
     -width => 0, 
     -height => 4, 
     -padx => 0, 
     -pady => 0, 
     -relief => 'flat', 
     -bg => 'white', 
    )->pack(
     -in => $item, 
     -side => 'left', 
     -anchor => 's', 
    ); 
    push (@items, $infobtn); 

    # record created widget 
    push (@cur_items, \@items); 
} 
# end of init 
関連する問題