Как прокрутить один кадр в Perl Tk? - PullRequest
2 голосов
/ 16 февраля 2010

Я пытаюсь создать графический интерфейс для программы конвертации. Я хочу создать фрейм, содержащий файл журнала, но не могу его получить. Я нашел несколько кодов, чтобы сделать прокручивание всего окна, но это не то, что я хочу. Я просто хочу прокрутить фрейм, содержащий метку, с изменяемой текстовой переменной.

Я даже попробовал следующий код:

 $s = $parent->new_ttk__scrollbar(-orient => 'vertical', -command => [$frame, 'yview']);
 $frame->configure(-scrollcommand => [$s, 'set']);

но я получаю ошибку. Perl говорит, что scrollcommand не является распознанной командой.

Я разместил часть моего кода на pastebin: http://pastebin.com/d22e5b134

1 Ответ

2 голосов
/ 18 февраля 2010

Рамочные виджеты не прокручиваются (т.е. они не поддерживают методы xview и yview). Используйте текстовый виджет вместо метки во фрейме. Если вам лень, используйте Tkx :: Scrolled , чтобы сделать это за вас. Если вы используете метку, потому что хотите, чтобы она была доступна только для чтения, используйте Tkx :: ROText . И пока я продвигаю свои собственные модули, используйте Tkx :: FindBar для приятного интерфейса поиска Find-As-You-Type.

use strict;
use warnings;

use Tkx;
use Tkx::FindBar;
use Tkx::ROText;
use Tkx::Scrolled;

my $mw = Tkx::widget->new('.');

my $text = $mw->new_tkx_Scrolled('tkx_ROText',
    -scrollbars => 'osoe',
    -wrap       => 'none',
);

my $findbar = $mw->new_tkx_FindBar(-textwidget => $text);

$findbar->add_bindings($mw,
    '<Control-f>'  => 'show',
    '<Escape>'     => 'hide',
    '<F3>'         => 'next',
    '<Control-F3>' => 'previous',
);

$text->g_pack(-fill => 'both', -expand => 1);

$findbar->g_pack(
    -after => $text,
    -side  => 'bottom',
    -fill  => 'x',
);

$findbar->hide();

open(my $fh, '<', __FILE__) or die;
$text->insert('end', do { local $/; <$fh> });
close $fh;

$mw->g_focus();
Tkx::MainLoop();
...