Как я могу прокрутить один кадр в Perl Tk?
Я пытаюсь создать графический интерфейс для программы преобразования. Я хочу создать фрейм, содержащий файл журнала, но не могу его получить. Я нашел несколько кодов, чтобы сделать прокручивание всего окна, но это не то, что я хочу. Я просто хочу прокрутить фрейм, содержащий метку, с изменяемой текстовой переменной.
Я даже попробовал следующий код:
$s = $parent->new_ttk__scrollbar(-orient => 'vertical', -command => [$frame, 'yview']);
$frame->configure(-scrollcommand => [$s, 'set']);
но я получаю ошибку. Perl говорит, что scrollcommand
не распознанная команда
Я разместил часть моего кода на pastebin: http://pastebin.com/d22e5b134
1 ответ
Рамочные виджеты не прокручиваются (т.е. они не поддерживают 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();