Я использую Perl
с Tk::Dialog
.
Я не могу хоть убей понять, как установить ширину текстового поля внутри диалогового окна в соответствии с шириной содержащегося в нем текста.
Неудачная попытка:
use strict;
use warnings;
use Tk;
use Tk::Dialog;
my $text1 = "This is the first answer which is a reasonably long string of text.";
my $text2 = "This is the second answer which is not quite as long as the first.";
my $textwidth = max(length($text1),length($text2)); # <-- get max text width here
# Create main window first (documentation/examples indicate this is necessary)
my $mw = MainWindow->new();
# create dialog
my $dialog = $mw->Dialog(-text => "Choose answer:\n\n"
. "A) ".$text1."\nB) ".$text2,
-bitmap => 'question',
-title => 'Make a choice',
-default_button => 'Both',
-width => $textwidth, # <-- set dialog to text width here
-buttons => [qw/Left Right Both Cancel/]);
my $answer = $dialog->Show();
$mw->withdraw();
print $answer;
exit;
sub max {
my ($max_so_far) = shift @_;
foreach (@_) {
if ($_ > $max_so_far) {
$max_so_far = $_;
}
}
return $max_so_far;
}
что приводит к:
Размер самого диалогового окна соответствует ширине текста, но размер текстового поля, содержащегося в нем (которое также не имеет границ), не изменяется. Кажется, ширина фиксирована около 35-40 символов (в зависимости от шрифта).
messageBox
не позволяет использовать настраиваемые кнопки. - Возможности ограничены прервать попыткуигнорировать, ок, окотмена, повторная попытка, данет или даноотмена.
Не путайте с количеством символов. Вы можете просто использовать здесь опцию -wraplength
(длина переноса 0 означает «не переносить вообще»):
use 5.032;
use strict;
use warnings;
use Tk;
use Tk::Dialog;
my $text1 = "This is the first answer which is a reasonably long string of text.".'x'x 30;
my $text2 = "This is the second answer which is not quite as long as the first.";
# Create main window first (documentation/examples indicate this is necessary)
my $mw = MainWindow->new();
# create dialog
my $dialog = $mw->Dialog(-text => "Choose answer:\n\n"
. "A) ".$text1."\nB) ".$text2,
-bitmap => 'question',
-title => 'Make a choice',
-default_button => 'Both',
-wraplength => 0,
-buttons => [qw/Left Right Both Cancel/]);
my $answer = $dialog->Show();
$mw->withdraw();
print $answer;
См. https://metacpan.org/dist/Tk/view/pod/options.pod#Name:-wrapLength
Если вы хотите использовать свою собственную логику, вам необходимо принять во внимание фактический используемый шрифт, разрешение экрана и т. д.
Tk::Font имеет $widget->fontMeasure(font,text)
для расчета ширины строки в пикселях в данном виджете.
Согласно этого руководства : «Эти новые диалоговые окна сообщений заменяют старую команду tk_dialog, которая не соответствует текущим соглашениям пользовательского интерфейса платформы». Поэтому я думаю, вам следует использовать Tk::messageBox вместо Tk::Dialog, поскольку последний является оберткой для
tk_dialog