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

Perl/Tk - Thèmes - idées de création d'un module

17 réponses
Avatar
perlgenome
Bonjour,

Utilisant r=E9guli=E8rement Perl/Tk pour la cr=E9ation de petites ou grosse=
s
applications, j'ai remarqu=E9 qu'il n'existait pas de modules pour
appliquer un th=E8me =E0 un widget Tk.

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

$Widget->set_design('rose_bonbon');

Le but est qu'un th=E8me 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=E9e de faire ce module ?
- Existe il des th=E8mes pour la cr=E9ation d'interface graphique dans
d'autres langages (JAVA, DotNEt, Tcl/Tk, autres) ?
- Si oui, avez vous des liens ?
- Avez vous des id=E9es de noms de th=E8mes et de type de configuration
que l'on pourrait proposer dans ce module ?

J'ai d=E9j=E0 cr=E9er rajouter dans le CPAN un module permettant de faire u=
n
widget canvas et un widget bouton =E0 couleur de fond d=E9grad=E9,
j'aimerais rajouter cette aspect th=E8me qui pourrait donner un peu plus
d'envies aux gens =E0 se lancer dans perl/Tk sans se dire
syst=E9matiquement qu'il est moche :-).

J'attends vos remarques positives ou n=E9gatives,

Merci,

Djibril

10 réponses

1 2
Avatar
perlgenome
Pas d'inspirations :-) ?
Avatar
Paul Gaborit
À (at) Thu, 2 Dec 2010 03:09:02 -0800 (PST),
perlgenome écrivait (wrote):

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 ?



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. ;-)


- 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...

- 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).

- 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.

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/>
Avatar
perlgenome
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éth ode
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
Avatar
xavier
perlgenome wrote:

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)
Avatar
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:PerlsitelibTk.
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:PerlsitelibTkDressing, qu'en pensez vous ?

Merci
Avatar
Paul Gaborit
À (at) Sat, 4 Dec 2010 11:09:14 -0800 (PST),
perlgenome écrivait (wrote):

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:PerlsitelibTk.
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:PerlsitelibTkDressing, 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/>
Avatar
perlgenome
On 5 déc, 11:47, Paul Gaborit wrote:
(at) Sat, 4 Dec 2010 11:09:14 -0800 (PST),
perlgenome crivait (wrote):

> 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:PerlsitelibTk.
> 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:PerlsitelibTkDressing, 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-
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
Avatar
Paul Gaborit
À (at) Sat, 4 Dec 2010 17:10:47 +0100,
(Xavier) écrivait (wrote):

perlgenome wrote:

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/>
Avatar
perlgenome
On 6 déc, 15:11, Paul Gaborit wrote:
(at) Sat, 4 Dec 2010 17:10:47 +0100,
(Xavier) crivait (wrote):

> perlgenome wrote:

>> 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 :-)
Avatar
perlgenome
On 6 déc, 15:11, Paul Gaborit wrote:
(at) Sat, 4 Dec 2010 17:10:47 +0100,
(Xavier) crivait (wrote):

> perlgenome wrote:

>> 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
1 2