Список Perl Tk со встроенными виджетами? - PullRequest
0 голосов
/ 19 сентября 2011

Кто-нибудь знает, есть ли тип списка в Perl Tk, который позволяет вам иметь виджет в списке?Например, мне нужен список из нескольких столбцов с одним из столбцов, содержащих виджет Checkbutton, который пользователь может проверять или снимать.

Ответы [ 2 ]

1 голос
/ 05 апреля 2013

Насколько я знаю, стандартный виджет со списком поддерживает только одну строку строки в качестве содержимого.Не расстраивайтесь, потому что мы можем легко создать более мощный список, который МОЖЕТ содержать виджеты!

Вот некоторые коды, которые я написал для программы.И результат подобен картинке, показанной ниже (я рисую ее, поэтому я беру ее непосредственно из соответствующего документа) enter image description here

СОВЕТЫ: ​​
- код, который я написал, написан на Perl с использованием Tcl:Модуль Tk, так что вы можете легко изменить его на Perl / Tk
. Как показано на рисунке, 6 виджетов создают массив @item, а 6 массивов @item - массив @cur_items, и вы можете начать с @cur_items для поиска любого виджета в этом списке (как вы уже знаете последовательность)
- я использую дополнительные кадры, чтобы сделать эти виджеты аккуратными, вы можете игнорировать их, если хотите организовать только два виджета (но я предлагаю использоватьframe)
- Пожалуйста, не обращайте внимания на имя виджета, например 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
0 голосов
/ 19 сентября 2011

Tk :: HList может быть тем, что вы ищете.См .:

http://www.perltk.org/index.php?option=com_content&task=view&id=23&Itemid=28

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...