Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tk font size

2 réponses
Avatar
perlgenome
Bonjour,

Je cherche =E0 obtenir les informations du font d'un Widget, comment
faire car je rencontre des comportements sp=E9ciaux ?
La taille r=E9cup=E9rer via ma m=E9thode est toujours inf=E9rieur de 4, 5, =
8,
etc pixels par rapport =E0 la vraie taille comme le montre l'exemple ci-
dessous.
Avez vous une id=E9e ?

Une autre fa=E7on serait de parser le font mais comment le faire
proprement. Car il est possible de cr=E9er un font de plusieurs fa=E7on :
- soit en ecrivant -font =3D> "Arial 8 normal" ou "{Arial} 8 normal" ou
Arial 8 , voir m=EAme en utilisant la m=E9thode fontCreate.


Exemple :

#!/usr/bin/perl
use strict;
use warnings;
use Tk;

my $mw =3D MainWindow->new(
-background =3D> 'white',
);

my $bb =3D $mw->Button(
-text =3D> 'bouton',
-font =3D> 'Arial 8 normal',
)->pack;

for my $size ( qw/ 12 14 16 18 20 22 24 26 28 30/ ) {
$mw->update;
$bb->configure( -font =3D> "Arial $size normal" );
my %font_data =3D $bb->fontActual( $bb->cget( -font ) );
print "=3D=3D> Size : $size\n";
map { print "$_ : $font_data{$_}\n"; } sort keys %font_data;
print "=3D=3D=3D=3D\n\n";
}

MainLoop();

Ce code me donne ce r=E9sultat :
=3D=3D> Size : 12
-family : Arial
-overstrike : 0
-size : -16
-slant : roman
-underline : 0
-weight : normal
=3D=3D=3D=3D

=3D=3D> Size : 14
-family : Arial
-overstrike : 0
-size : -19
-slant : roman
-underline : 0
-weight : normal
=3D=3D=3D=3D

=3D=3D> Size : 16
-family : Arial
-overstrike : 0
-size : -21
-slant : roman
-underline : 0
-weight : normal
=3D=3D=3D=3D

=3D=3D> Size : 18
-family : Arial
-overstrike : 0
-size : -24
-slant : roman
-underline : 0
-weight : normal
=3D=3D=3D=3D

=3D=3D> Size : 20
-family : Arial
-overstrike : 0
-size : -27
-slant : roman
-underline : 0
-weight : normal
=3D=3D=3D=3D

=3D=3D> Size : 22
-family : Arial
-overstrike : 0
-size : -29
-slant : roman
-underline : 0
-weight : normal
=3D=3D=3D=3D

=3D=3D> Size : 24
-family : Arial
-overstrike : 0
-size : -32
-slant : roman
-underline : 0
-weight : normal
=3D=3D=3D=3D

=3D=3D> Size : 26
-family : Arial
-overstrike : 0
-size : -35
-slant : roman
-underline : 0
-weight : normal
=3D=3D=3D=3D

=3D=3D> Size : 28
-family : Arial
-overstrike : 0
-size : -37
-slant : roman
-underline : 0
-weight : normal
=3D=3D=3D=3D

=3D=3D> Size : 30
-family : Arial
-overstrike : 0
-size : -40
-slant : roman
-underline : 0
-weight : normal
=3D=3D=3D=3D

Merci

Djibril

2 réponses

Avatar
Paul Gaborit
À (at) Fri, 11 Jun 2010 07:34:46 -0700 (PDT),
perlgenome écrivait (wrote):

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 ?


[...]
my %font_data = $bb->fontActual( $bb->cget( -font ) );
Ce code me donne ce résultat :
==> Size : 12


[...]
-size : -16



Pourquoi utiliser fontActual ?

Petit extrait de la doc '804delta.pod' :

The fontActual method now returns the pixel value instead of the
point value for -size. Pixel values are expressed as negative
numbers.

Le -16 est donc en pixel alors que le 12 est en point typographique.

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
perlgenome
On 14 juin, 01:31, Paul Gaborit wrote:
À (at) Fri, 11 Jun 2010 07:34:46 -0700 (PDT),
perlgenome écrivait (wrote):



> 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 ?
[...]
>   my %font_data = $bb->fontActual( $bb->cget( -font ) );
> Ce code me donne ce résultat :
> ==> Size : 12
[...]
> -size : -16

Pourquoi utiliser fontActual ?

Petit extrait de la doc '804delta.pod' :

       The fontActual method now returns the pixel value instead of the
       point value for -size. Pixel values are expressed as negat ive
       numbers.

Le -16 est donc en pixel alors que le 12 est en point typographique.

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>



Merci pour ta réponse Paul.

En fait, j'avais besoin de jouer avec les font afin de simuler
l'option -compound pour mon module Tk pour la création de bouton avec
couleurs dégradées.
Mais j'ai finalement trouvé une autre méthode beaucoup plus propre et
efficace.

Djibril