perlgenome
2010-06-11 14:34:46 UTC
Bonjour,
Je cherche à obtenir les informations du font d'un Widget, comment
faire car je rencontre des comportements spéciaux ?
La taille récupérer via ma méthode est toujours inférieur de 4, 5, 8,
etc pixels par rapport à la vraie taille comme le montre l'exemple ci-
dessous.
Avez vous une idée ?
Une autre façon serait de parser le font mais comment le faire
proprement. Car il est possible de créer un font de plusieurs façon :
- soit en ecrivant -font => "Arial 8 normal" ou "{Arial} 8 normal" ou
Arial 8 , voir même en utilisant la méthode fontCreate.
Exemple :
#!/usr/bin/perl
use strict;
use warnings;
use Tk;
my $mw = MainWindow->new(
-background => 'white',
);
my $bb = $mw->Button(
-text => 'bouton',
-font => 'Arial 8 normal',
)->pack;
for my $size ( qw/ 12 14 16 18 20 22 24 26 28 30/ ) {
$mw->update;
$bb->configure( -font => "Arial $size normal" );
my %font_data = $bb->fontActual( $bb->cget( -font ) );
print "==> Size : $size\n";
map { print "$_ : $font_data{$_}\n"; } sort keys %font_data;
print "====\n\n";
}
MainLoop();
Ce code me donne ce résultat :
==> Size : 12
-family : Arial
-overstrike : 0
-size : -16
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 14
-family : Arial
-overstrike : 0
-size : -19
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 16
-family : Arial
-overstrike : 0
-size : -21
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 18
-family : Arial
-overstrike : 0
-size : -24
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 20
-family : Arial
-overstrike : 0
-size : -27
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 22
-family : Arial
-overstrike : 0
-size : -29
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 24
-family : Arial
-overstrike : 0
-size : -32
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 26
-family : Arial
-overstrike : 0
-size : -35
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 28
-family : Arial
-overstrike : 0
-size : -37
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 30
-family : Arial
-overstrike : 0
-size : -40
-slant : roman
-underline : 0
-weight : normal
====
Merci
Djibril
Je cherche à obtenir les informations du font d'un Widget, comment
faire car je rencontre des comportements spéciaux ?
La taille récupérer via ma méthode est toujours inférieur de 4, 5, 8,
etc pixels par rapport à la vraie taille comme le montre l'exemple ci-
dessous.
Avez vous une idée ?
Une autre façon serait de parser le font mais comment le faire
proprement. Car il est possible de créer un font de plusieurs façon :
- soit en ecrivant -font => "Arial 8 normal" ou "{Arial} 8 normal" ou
Arial 8 , voir même en utilisant la méthode fontCreate.
Exemple :
#!/usr/bin/perl
use strict;
use warnings;
use Tk;
my $mw = MainWindow->new(
-background => 'white',
);
my $bb = $mw->Button(
-text => 'bouton',
-font => 'Arial 8 normal',
)->pack;
for my $size ( qw/ 12 14 16 18 20 22 24 26 28 30/ ) {
$mw->update;
$bb->configure( -font => "Arial $size normal" );
my %font_data = $bb->fontActual( $bb->cget( -font ) );
print "==> Size : $size\n";
map { print "$_ : $font_data{$_}\n"; } sort keys %font_data;
print "====\n\n";
}
MainLoop();
Ce code me donne ce résultat :
==> Size : 12
-family : Arial
-overstrike : 0
-size : -16
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 14
-family : Arial
-overstrike : 0
-size : -19
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 16
-family : Arial
-overstrike : 0
-size : -21
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 18
-family : Arial
-overstrike : 0
-size : -24
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 20
-family : Arial
-overstrike : 0
-size : -27
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 22
-family : Arial
-overstrike : 0
-size : -29
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 24
-family : Arial
-overstrike : 0
-size : -32
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 26
-family : Arial
-overstrike : 0
-size : -35
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 28
-family : Arial
-overstrike : 0
-size : -37
-slant : roman
-underline : 0
-weight : normal
====
==> Size : 30
-family : Arial
-overstrike : 0
-size : -40
-slant : roman
-underline : 0
-weight : normal
====
Merci
Djibril