Discussion:
Perl/Tk - Thèmes - idées de création d'un module
(trop ancien pour répondre)
perlgenome
2010-12-02 11:09:02 UTC
Permalink
Bonjour,

Utilisant régulièrement Perl/Tk pour la création de petites ou grosses
applications, j'ai remarqué qu'il n'existait pas de modules pour
appliquer un thème à un widget Tk.

J'aimerais créer un module Tk qui proposerait divers thèmes. De ce
fait, n'importe qui pourrait habiller simplement et rapidement des
widgets en l'utilisant via une ligne en fin de code ressemblant à :

$Widget->set_design('rose_bonbon');

Le but est qu'un thème applique un certain type de configuration :
- couleur des boutons
- couleur des champs de saisie
- couleur des cadres
- couleur des bordures
- etc

J'aurais besoin de votre aide pour mes questions :
- Pensez vous que ce soit une bonne idée de faire ce module ?
- Existe il des thèmes pour la création d'interface graphique dans
d'autres langages (JAVA, DotNEt, Tcl/Tk, autres) ?
- Si oui, avez vous des liens ?
- Avez vous des idées de noms de thèmes et de type de configuration
que l'on pourrait proposer dans ce module ?

J'ai déjà créer rajouter dans le CPAN un module permettant de faire un
widget canvas et un widget bouton à couleur de fond dégradé,
j'aimerais rajouter cette aspect thème qui pourrait donner un peu plus
d'envies aux gens à se lancer dans perl/Tk sans se dire
systématiquement qu'il est moche :-).

J'attends vos remarques positives ou négatives,

Merci,

Djibril
perlgenome
2010-12-03 13:07:06 UTC
Permalink
Pas d'inspirations :-) ?
Paul Gaborit
2010-12-03 17:26:37 UTC
Permalink
À (at) Thu, 2 Dec 2010 03:09:02 -0800 (PST),
Post by perlgenome
Utilisant régulièrement Perl/Tk pour la création de petites ou grosses
applications, j'ai remarqué qu'il n'existait pas de modules pour
appliquer un thème à un widget Tk.
J'aimerais créer un module Tk qui proposerait divers thèmes. De ce
fait, n'importe qui pourrait habiller simplement et rapidement des
$Widget->set_design('rose_bonbon');
- couleur des boutons
- couleur des champs de saisie
- couleur des cadres
- couleur des bordures
- etc
- Pensez vous que ce soit une bonne idée de faire ce module ?
Oui et non...

En fait, la philosophie de Tk est (était) de proposer un moyen de créer
une interface graphique de manière standard tout en adoptant le 'look'
standard de la plateforme où s'exécute le script. En théorie, si
j'utilise un script Perl/Tk sur Windows XP, mon application aura un look
Windows XP. Si j'utilise ce même script sur Gnome, il aura un look
Gnome. Etc. Que ce soit dans Windows ou dans Gnome (ou autres), c'est le
thème choisi par l'utilisateur pour toutes son interface qui devrait
s'appliquer à mon application.

La réalité est un tout petit peu différente et le look Tk brut de
fonderie se remarque à 10km ! ;-)

Donc, au final, cela me semble une bonne idée. ;-)
Post by perlgenome
- Existe il des thèmes pour la création d'interface graphique dans
d'autres langages (JAVA, DotNEt, Tcl/Tk, autres) ?
Cela n'existe pas directement dans chacun des langages mais plutôt dans
leurs modules ou bibliothèques de création d'interfaces graphiques...
Post by perlgenome
- Si oui, avez vous des liens ?
Non (je ne développe quasiment plus d'applications GUI sauf en Perl/Tk
quand c'est absolument nécessaire.. et ça l'est rarement).
Post by perlgenome
- Avez vous des idées de noms de thèmes et de type de configuration
que l'on pourrait proposer dans ce module ?
Il faudrait créer une trame générique pour pouvoir créer des thèmes (le
boulot du codeur) et décrire chaque thème dans un fichier (ou un
répertoire) de configuration lié à ce thème (le boulot du graphiste).
Comme cela, tout le monde pourrait participer "facilement" à la création
de nouveaux thèmes.
Post by perlgenome
J'ai déjà créer rajouter dans le CPAN un module permettant de faire un
widget canvas et un widget bouton à couleur de fond dégradé,
j'aimerais rajouter cette aspect thème qui pourrait donner un peu plus
d'envies aux gens à se lancer dans perl/Tk sans se dire
systématiquement qu'il est moche :-).
C'est pas moche. C'est juste un peu frustre ! ;-)
Lorsque l'application est vraiment utile, cela importe peu.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
perlgenome
2010-12-04 13:36:13 UTC
Permalink
Bonjour Paul (et les autres) et merci pour ta réponse.

D'ailleurs, depuis quelques temps, les accents de tes messages sont
tronqués et ne s'affichent pas sur mon navigateur :-), problème
d'encodage !!!

Pour revenir au module. Je suis d'accord avec toi sur le fait que le
"look and feel" des interfaces graphiques dépend du système
d'exploitation qui l'exécute. Un programme Perl/Tk aura un rendu
différent sous Win2000, XP, Vista, Mac ou sous Linux. L'aspect de la
fenêtre change. Je ne compte pas changer cela n'ayant de toute façon
pas la possibilité.
Mais une chose possible est de permettre un gain de temps considérable
dans la configuration de l'habillage des programmes via ce système de
thèmes. Nous somme bien d'accord, le plus important
dans l'application est son utilité et absolument pas son aspect visuel
ou graphique qui importe très peu.

J'ai déjà avancé dans le module, si ce n'est fini (d'un point de vu
fonctionnel) car j'utilisais déjà ce principe pour mes développements
et je voulais avoir vos avis.
Le module pour l'instant se nomme Tk::Dressing (pour le nom, j'avoue
ne pas avoir encore réfléchi, je verrais plus tard). Il contient 4
méthodes :
- load_theme_file : qui permet de charger un fichier ini (un thème)
contenant la configuration souhaitée.
- get_theme_file : qui permet de créer un fichier ini à partir d'un
thème défini dans le script ou interne au module.
- get_all_theme : qui permet de lister les thèmes connus par le
module.
- design_widget : qui permet d'appliquer le thème au widget voulu et
ses enfants.

Le module s'utilise de la sorte :
use Tk::Dressing;
my $TkDressing = new Tk::Dressing;

...
et à la fin de son code TK (où l'on veut), du moins, une fois les
éléments placés sur son widget et/ou affichés, on appelle la méthode
design_widget.

$TkDressing->design_widget(
-widget => $MonWidget,
-theme => 'MongueurTheme',
);

Le thème est de ce fait appliqué au widget. Y a rien d'autre à faire,
c'est simple et rapide. J'ai néanmoins quelques questions car mon but
était :
1) de proposer plusieurs thèmes dans le module histoire que
l'utilisateur du module puisse faire son choix sans avoir à tout
refaire et rien ne lui empêche de le modifier pour l'adapter à ses
besoins via le .ini
2) de donner la possibilité à l'utilisateur de charger son thème
3) de trouver un moyen pour rajouter des thèmes au module au fil des
mises à jour du module sur le CPAN (grâce à la participation des
personnes l'utilisant peut être via le RT du CPAN). Pour l'instant,
les thèmes
par défaut sont en dur dans le .pm.

Pour le 1), c'est ok, j'ai 4 thèmes par défaut, mais il m'en faudrait
plus.
Pour le 2), c'est ok et fonctionnel.
Pour le 3), je ne sais pas comment faire pour qu'au moment où je
package mon module pour le CPAN, qu'il y ait un répertoire où je
pourrais stocker tous ces thèmes.ini car tout mettre dans le .pm,
c'est un peu lourd, non optimum et moche.
J'ai pour habitude dans mes modules CPAN de faire un répertoire demo
dans lequel je mets des programmes d'exemple, mais ces derniers ne
sont accessibles que via le MANIFEST sur le site du CPAN, ou (sur
Linux) dans le répertoire /root/.cpan/build/MONMODULE-xcxf/demo/
prog.pl. Sous Windows (installation via ppm), il est carrément
inexistant. Donc si je décide de faire des .ini pour mes thèmes par
défaut, comment m'y prendre pour y accéder ? Comment font les modules
ayant des fichiers supplémentaires à utiliser pour le fonctionnement
de leur module ?

Voilà, merci d'avance pour vos réponses et remarques. En ce qui
concerne le thème, voici un exemple, on y retrouve essentiellement les
options en rapport avec les couleurs, mais on pourrait envisager d'en
mettre plus.

TOTO.ini
[Balloon]
-background: #FFFFCC
-foreground: black

[BrowseEntry]
-background: #FFFFCC
-foreground: black
-disabledbackground: #FFFFCC
-disabledforeground: red

[Button]
-activebackground: #E3E3E3
-background: #E3E3E3
-foreground: black
-activeforeground: black

[Canvas]
-background: #FFFFCC

[Checkbutton]
-highlightbackground: #FFFF99
-activebackground: #FFFF99
-background: #FFFF99
-foreground: black
-disabledforeground: black
-activeforeground: black
-selectcolor: #FFFFCC

[ColoredButton]
-highlightbackground: #FFFF99
-background: #FFFF99
-autofit: 1

[DirTree]
-highlightbackground: #FFFF99
-background: #FFFFCC
-foreground: black
-highlightcolor: #FFFF99
-selectforeground: black
-selectbackground: #FFFF99

[Entry]
-highlightbackground: #FFFF99
-background: #FFFFCC
-foreground: black
-readonlybackground: #FFFFCC
-insertbackground: black

[EntryCheck]
-background: #FFFFCC
-disabledbackground: #FFFFCC
-insertbackground: black

[Frame]
-highlightbackground: #FFFF99
-background: #FFFF99

[HList]
-highlightbackground: #FFFF99
-background: #FFFFCC
-foreground: black
-highlightcolor: #FFFF99
-selectforeground: black
-selectbackground: #FFFFCC

[LabEntry]
-background: #FFFF99
-disabledbackground: #FFFFCC

[LabFrame]
-background: #FFFF99

[Label]
-highlightbackground: #FFFF99
-background: #FFFF99
-foreground: black

[Labelframe]
-background: #FFFF99

[Listbox]
-background: #FFFFCC
-foreground: black

[MainWindow]
-highlightbackground: #FFFF99
-background: #FFFF99
-highlightcolor: #FFFF99

[Menu]
-activebackground: #FFFFCC
-background: #FFFFCC
-foreground: black
-selectcolor: #FFFFCC
-activeforeground: black

[Menubutton]
-activebackground: #E3E3E3
-background: #E3E3E3
-foreground: black
-activeforeground: black

[NoteBook]
-focuscolor: #FFFF99
-backpagecolor: #FFFF99
-background: #FFFF99
-foreground: black
-inactivebackground: #FFFFCC

[Optionmenu]
-activebackground: #E3E3E3
-borderwidth: 0
-background: #E3E3E3
-foreground: black
-activeforeground: black

[ProgressBarPlus]

-colors: 0
-colors: #7FA0C0

[ROText]
-background: #FFFFCC
-foreground: black
-insertbackground: black

[Radiobutton]
-highlightbackground: #FFFF99
-activebackground: #FFFF99
-background: #FFFF99
-foreground: black
-disabledforeground: black
-activeforeground: black
-selectcolor: #FFFFCC

[Scale]
-highlightbackground: #FFFF99
-activebackground: #FFFFCC
-background: #FFFF99
-troughcolor: #969696
-foreground: black

[Spinbox]
-background: #FFFFCC
-foreground: black
-readonlybackground: #FFFFCC
-buttonbackground: #E3E3E3

[Text]
-background: #FFFFCC
-foreground: black
-insertbackground: black

[Toplevel]
-highlightbackground: #FFFF99
-background: #FFFF99
-highlightcolor: #FFFF99

[Tree]
-highlightbackground: #FFFF99
-background: #FFFFCC
-foreground: black
-highlightcolor: #FFFF99
-selectforeground: black
-selectbackground: #FFFF99



Djibril
Xavier
2010-12-04 16:10:47 UTC
Permalink
Post by perlgenome
D'ailleurs, depuis quelques temps, les accents de tes messages sont
tronqués et ne s'affichent pas sur mon navigateur :-), problème
d'encodage !!!
Non, problème connu de Google.
--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
perlgenome
2010-12-04 19:09:14 UTC
Permalink
Pour le rajout de fichiers dans un module CPAN, je viens de lire dans
Module::Build::Cookbook qu'il faut jouer avec la méthode
add_build_element, Du coup, à l'installation sous Windows,
les fichiers ini sont mis dans le répertoire C:\Perl\site\lib\Tk.
Trouvant cela un peu dangereux, La meilleure idée serait d'avoir un
nom de module en 3 parties de type Tk::Dressing::Themes afin d'avoir
un espace de nom différent avec un répertoire Themes. Du coup, les ini
se trouverait dans C:\Perl\site\lib\Tk\Dressing, qu'en pensez vous ?

Merci
Paul Gaborit
2010-12-05 10:47:54 UTC
Permalink
À (at) Sat, 4 Dec 2010 11:09:14 -0800 (PST),
Post by perlgenome
Pour le rajout de fichiers dans un module CPAN, je viens de lire dans
Module::Build::Cookbook qu'il faut jouer avec la méthode
add_build_element, Du coup, à l'installation sous Windows,
les fichiers ini sont mis dans le répertoire C:\Perl\site\lib\Tk.
Trouvant cela un peu dangereux, La meilleure idée serait d'avoir un
nom de module en 3 parties de type Tk::Dressing::Themes afin d'avoir
un espace de nom différent avec un répertoire Themes. Du coup, les ini
se trouverait dans C:\Perl\site\lib\Tk\Dressing, qu'en pensez vous ?
Je ne connais pas la meilleure solution pour ce problème de fichiers
complémentaires mais je pense que la section suivante dans
Module::Build::Cookbook (Adding new elements to the install process)
donne de bons conseils et permettrait de créer un sous-répertoire
'themes' là où tu le souhaites...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
perlgenome
2010-12-05 12:06:48 UTC
Permalink
Post by Paul Gaborit
(at) Sat, 4 Dec 2010 11:09:14 -0800 (PST),
Post by perlgenome
Pour le rajout de fichiers dans un module CPAN, je viens de lire dans
Module::Build::Cookbook qu'il faut jouer avec la m thode
add_build_element, Du coup, l'installation sous Windows,
les fichiers ini sont mis dans le r pertoire C:\Perl\site\lib\Tk.
Trouvant cela un peu dangereux, La meilleure id e serait d'avoir un
nom de module en 3 parties de type Tk::Dressing::Themes afin d'avoir
un espace de nom diff rent avec un r pertoire Themes. Du coup, les ini
se trouverait dans C:\Perl\site\lib\Tk\Dressing, qu'en pensez vous ?
Je ne connais pas la meilleure solution pour ce probl me de fichiers
compl mentaires mais je pense que la section suivante dans
Module::Build::Cookbook (Adding new elements to the install process)
donne de bons conseils et permettrait de cr er un sous-r pertoire
'themes' l o tu le souhaites...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en fran ais - <http://perl.mines-albi.fr/>
Merci Paul,
J'ai réussi à créer un répertoire en utilisant $builder-
Post by Paul Gaborit
add_build_element('ini'); dans mon programme Build.
Du coup, il me copie bien le répertoire themes.

Mon problème actuel est le suivant. Comment trouver le bon chemin vers
ce répertoire dans mon .pm.
Si je fais my $rep = './themes'; Perl cherche le répertoire par
rapport à l'emplacement du .pl appelant.

Existe il une variable spéciale Perl donnant la localisation du .pm ?

La seule parade actuelle que j'ai trouvée est la suivante :
my $themes_directory = $INC{'Tk/Dressing.pm'};
$themes_directory =~ s{/Dressing\.pm$}{/themes};

Est ce propre ?

Merci
Paul Gaborit
2010-12-06 17:14:18 UTC
Permalink
À (at) Sun, 5 Dec 2010 04:06:48 -0800 (PST),
Post by perlgenome
Existe il une variable spéciale Perl donnant la localisation du .pm ?
my $themes_directory = $INC{'Tk/Dressing.pm'};
$themes_directory =~ s{/Dressing\.pm$}{/themes};
Pour récupérer le répertoire à partir d'un chemin de fichier, mieux vaut
utiliser la fonction 'dirname' de File::Basename. Donc :

use File::Basename qw/dirname/;

...

my $themes_directory = dirname($INC{'Tk/Dressing.pm'});

(Et pour les mêmes raison, ne pas oublier d'utiliser File::Spec pour
construire les chemins. Les utilisateurs de systèmes autres qu'Unix et
Windows te remercieront...)
Post by perlgenome
Est ce propre ?
Cela me semble bien...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
perlgenome
2010-12-06 17:50:30 UTC
Permalink
Post by Paul Gaborit
(at) Sun, 5 Dec 2010 04:06:48 -0800 (PST),
Existe il une variable sp ciale Perl donnant la localisation du .pm ?
my $themes_directory = $INC{'Tk/Dressing.pm'};
$themes_directory =~ s{/Dressing\.pm$}{/themes};
Pour r cup rer le r pertoire partir d'un chemin de fichier, mieux vaut
 use File::Basename qw/dirname/;
 ...
 my $themes_directory = dirname($INC{'Tk/Dressing.pm'});
(Et pour les m mes raison, ne pas oublier d'utiliser File::Spec pour
construire les chemins. Les utilisateurs de syst mes autres qu'Unix et
Windows te remercieront...)
Est ce propre ?
Cela me semble bien...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en fran ais - <http://perl.mines-albi.fr/>
Merci pour les précisions j'oubliais dirname et File::Spec.

Pour le choix du nom du module Tk::LookAndFeel, Tk::Design,
Tk::Themes, Tk::Dressing ou un autre nom ? une idée ?
Tonton Th
2010-12-06 17:55:51 UTC
Permalink
Post by perlgenome
Pour le choix du nom du module Tk::LookAndFeel, Tk::Design,
Tk::Themes, Tk::Dressing ou un autre nom ? une idée ?
Je regarde l'idée depuis le début, et je vote pour

Tk::Dressing
--
Ma coiffeuse est formidable - http://sonia.buvette.org/
perlgenome
2010-12-06 19:47:08 UTC
Permalink
Post by perlgenome
Pour le choix du nom du module Tk::LookAndFeel, Tk::Design,
Tk::Themes, Tk::Dressing ou un autre nom ?  une id e ?
    Je regarde l'id e depuis le d but, et je vote pour
                  Tk::Dressing
--
Ma coiffeuse est formidable -http://sonia.buvette.org/
+1 pour Tk::Dressing :-)
Paul Gaborit
2010-12-07 06:11:33 UTC
Permalink
À (at) Mon, 6 Dec 2010 09:50:30 -0800 (PST),
Post by perlgenome
Pour le choix du nom du module Tk::LookAndFeel, Tk::Design,
Tk::Themes, Tk::Dressing ou un autre nom ? une idée ?
Je ne suis pas sûr d'être de très bons conseils pour l'anglais. Mais
s'il faut proposer quelque chose, je dirais Tk::Style ou Tk::Dressing.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
perlgenome
2010-12-07 09:04:54 UTC
Permalink
Post by Paul Gaborit
(at) Mon, 6 Dec 2010 09:50:30 -0800 (PST),
Post by perlgenome
Pour le choix du nom du module Tk::LookAndFeel, Tk::Design,
Tk::Themes, Tk::Dressing ou un autre nom ?  une id e ?
Je ne suis pas s r d' tre de tr s bons conseils pour l'anglais. Mais
s'il faut proposer quelque chose, je dirais Tk::Style ou Tk::Dressing.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en fran ais - <http://perl.mines-albi.fr/>
Moi je vote pour Tk::Dressing et Tk::LookAndFeel

Donc +3 pour Tk::Dressing, +1 pour Tk::Style et +1 pour
Tk::LookAndFeel :-)
perlgenome
2010-12-10 06:48:17 UTC
Permalink
Tk::Dressing disponible sur le CPAN.

A vos tests :-).

Paul Gaborit
2010-12-06 14:11:32 UTC
Permalink
À (at) Sat, 4 Dec 2010 17:10:47 +0100,
Post by Xavier
Post by perlgenome
D'ailleurs, depuis quelques temps, les accents de tes messages sont
tronqués et ne s'affichent pas sur mon navigateur :-), problème
d'encodage !!!
Non, problème connu de Google.
J'ai d'ailleurs cherché le moyen de signaler ce bug (assez récent =
quelques semaines) à Google... Mais il faut être inscrit sur Google
Groups pour pouvoir le faire !

Il faut donc que ce soit l'un des utilisateurs de Google Groups qui
s'y colle...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
perlgenome
2010-12-06 15:23:43 UTC
Permalink
Post by Paul Gaborit
(at) Sat, 4 Dec 2010 17:10:47 +0100,
Post by perlgenome
D'ailleurs, depuis quelques temps, les accents de tes messages sont
tronqu s et ne s'affichent pas sur mon navigateur :-), probl me
d'encodage !!!
Non, probl me connu de Google.
J'ai d'ailleurs cherch le moyen de signaler ce bug (assez r cent =
quelques semaines) Google... Mais il faut tre inscrit sur Google
Groups pour pouvoir le faire !
Il faut donc que ce soit l'un des utilisateurs de Google Groups qui
s'y colle...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en fran ais - <http://perl.mines-albi.fr/>
Faut que je m'y colle alors vu que j'ai un compte gmail :-)
perlgenome
2010-12-06 15:24:35 UTC
Permalink
Post by Paul Gaborit
(at) Sat, 4 Dec 2010 17:10:47 +0100,
Post by perlgenome
D'ailleurs, depuis quelques temps, les accents de tes messages sont
tronqu s et ne s'affichent pas sur mon navigateur :-), probl me
d'encodage !!!
Non, probl me connu de Google.
J'ai d'ailleurs cherch le moyen de signaler ce bug (assez r cent =
quelques semaines) Google... Mais il faut tre inscrit sur Google
Groups pour pouvoir le faire !
Il faut donc que ce soit l'un des utilisateurs de Google Groups qui
s'y colle...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en fran ais - <http://perl.mines-albi.fr/>
Sinon pas d'idées pour mes interrogations Paul ?

Merci
Loading...