Есть ли обходной путь к исчезающей полосе прокрутки текстового виджета Perl / Tk для правильно выровненного контента? - PullRequest
2 голосов
/ 26 мая 2010

Я столкнулся с ошибкой, я верю в Perl / Tk 804.027 Text Widget (с использованием Scrollable('ROText')). Когда я добавляю тег, который выбирает все и применяет изменение конфигурации для выравнивания вправо, полосы прокрутки не отображаются. Если я закомментирую tagConfigure, где я выравниваю вправо, полосы прокрутки возвращаются.

Есть ли у кого-нибудь обходное решение или исправление, позволяющее правильно выравнивать содержимое текстового виджета (включая текстовые и встроенные виджеты ввода), и при этом иметь функциональные горизонтальные полосы прокрутки?

(Update)

Вот пример сценария, который будет воспроизводить проблему:

use Tk;

$mw = MainWindow->new;
$mw->title("Testing");
$mw->geometry();

$pw = $mw->Scrolled('Panedwindow',-showhandle=>0, -sashwidth=>0, -sashpad=>0, -scrollbars=>'e');

$pw->pack(qw/-side top -expand yes -fill both -pady 2 -padx 2m/);

$t1 = $pw->Scrolled("Text", -scrollbars => 'os', -bg=>"red", -width => 40, -wrap => "none", -relief=>"flat");
$t2 = $pw->Scrolled("Text", -scrollbars => 'os', -bg=>"blue", -width => 20, -wrap => "none", -relief=>"flat");

$pw->add($t1,$t2);

# this loop is only to demonstrate the second problem: vertical scrolling 
# on parent widget not working
foreach my $ct (1..50) {
$t1->insert("end","abcdef-abcdef-abcdef-abcdef-abcdef-abcdef-abcdef-abcdef-abcdef-abcdef\n");
 }
$t1->tagAdd("content", '1.0', 'end');


# this is the justify right & loose horizontal scrolling problem:
# change the justify from left to right and the scrollbars will not show up
$t1->tagConfigure("content", -justify=>"left");

MainLoop;

Проблема, с которой я столкнулся, действительно двойственная для моего приложения, и продемонстрировано, что обе не работают в приведенном выше примере:

  1. Мне нужна левая сторона панели с горизонтальной прокруткой и вправо оправдано
  2. Мне нужно застекленное окно виджет (родитель двух панелей) быть с вертикальной прокруткой (оба левая и правая панели прокручиваются вместе вместе).

1 Ответ

0 голосов
/ 27 мая 2010

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

Часто трудно увидеть вашу ошибку в середине хитрого кода приложения. Разделив его на простой тестовый пример, вы избавитесь от проблемы. И, если проблема продолжает существовать, у вас есть тестовый пример, о котором вы можете сообщить автору или опубликовать на таком сайте.

...