Outils pour utilisateurs

Outils du site


issue185:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue185:python [2022/10/03 07:05] d52frissue185:python [2022/10/04 17:33] (Version actuelle) andre_domenech
Ligne 22: Ligne 22:
     }     }
     ColorSets.update(newset)**     ColorSets.update(newset)**
 +    
 +Désolé pour mon absence du mois dernier. Entre un déménagement et mes problèmes de santé, j'ai dû mettre beaucoup de choses en attente pendant un certain temps et celle-ci, malheureusement, a fini par être l'une d'elles.
 +
 +J'ai promis que nous continuerions la série d'articles sur les styles et les thèmes, c'est donc ce que nous allons faire.
 +
 +Les informations relatives à chaque jeu de couleurs sont contenues dans un dictionnaire. Il ressemble à celui illustré en haut à droite.
 +
 +Vous pouvez voir qu'il y a une clé qui contient le nom du jeu de couleurs, puis un autre dictionnaire qui contient une désignation d'arrière-plan/avant-plan et une valeur hexadécimale de la couleur. Le nom de la couleur d'arrière-plan/avant-plan est la clé et la valeur hexadécimale de la couleur elle-même est la valeur des entrées du dictionnaire.
 +
 +Il suffit d'ajouter de nouveaux jeux de couleurs à un jeu global pour que tout reste synchronisé.
 +
 +
 +    newset = {
 +        response: {
 +            "BG1": lastbg1,
 +            "BG2": lastbg2,
 +            "BG3": lastbg3,
 +            "FG1": lastfg1,
 +            "FG2": lastfg2,
 +            "FG3": lastfg3,
 +        }
 +    }
 +    ColorSets.update(newset)
 +
  
 **As you can see, we use the dictionary.update method to add the new one. But how do we save the “master” colorset to a file for retrieval later on? We use the pickle library. However, we have to be careful if we are going to be sharing this file with others, since by default newer versions of Python greater than 3.7 use a higher compression algorithm. Python 3.7 uses a level 4 compression. So to support all Python versions from 3.7 forward, we have to state that the level must be “pickle.DEFAULT_PROTOCOL (shown right). **As you can see, we use the dictionary.update method to add the new one. But how do we save the “master” colorset to a file for retrieval later on? We use the pickle library. However, we have to be careful if we are going to be sharing this file with others, since by default newer versions of Python greater than 3.7 use a higher compression algorithm. Python 3.7 uses a level 4 compression. So to support all Python versions from 3.7 forward, we have to state that the level must be “pickle.DEFAULT_PROTOCOL (shown right).
Ligne 40: Ligne 64:
  
 Next, we write out the dictionaries for the colorset with the various sets that were selected.** Next, we write out the dictionaries for the colorset with the various sets that were selected.**
 +
 +Comme vous pouvez le voir, nous utilisons la méthode dictionary.update pour ajouter le nouveau jeu de couleurs. Mais comment sauvegarder le jeu de couleurs « maître » dans un fichier pour le retrouver plus tard ? Nous utilisons la bibliothèque pickle. Cependant, nous devons faire attention si nous voulons partager ce fichier avec d'autres personnes, car, par défaut, les nouvelles versions de Python supérieures à 3.7 utilisent un algorithme de compression plus élevé. Python 3.7 utilise une compression de niveau 4. Ainsi, pour prendre en charge toutes les versions de Python à partir de la 3.7, nous devons indiquer que le niveau doit être « pickle.DEFAULT_PROTOCOL » (à droite).
 +
 +Le programme dispose également d'un utilitaire qui affiche les dictionnaires sous la forme d'une « visionneuse » ( à droite).
 +
 +Comme il s'agit d'un dictionnaire, la sortie avec toutes les accolades ne sera pas très jolie lorsqu'elle sera affichée en texte. Pour rendre le résultat un peu plus joli, nous pouvons utiliser la bibliothèque pretty print. Une fois que nous avons formaté les données comme nous le souhaitons, nous pouvons simplement utiliser la méthode tk.text.insert pour placer les données dans le widget afin de les afficher.
 +
 +Le programme permet également de créer un fichier séparé qui peut être importé dans un programme que vous avez écrit et qui vous permettra d'utiliser un seul jeu de couleurs ou plusieurs jeux de couleurs avec votre propre liste de widgets. Il existe un formulaire pour le faire à partir du menu des boutons. Lorsque le bouton « Write File » (Écrire le fichier) est cliqué, nous créons le fichier d'exportation.
 +
 +La première chose que nous faisons est de créer la section d'importation du fichier.
 +
 +import tkinter as tk
 +
 +import tkinter.ttk as ttk
 +
 +from tkinter.constants import *
 +
 +Ensuite, nous écrivons les dictionnaires pour le jeu de couleurs avec les différents jeux qui ont été sélectionnés.
 +
  
 **newset={"Greg1": {"BG1": "gray54", "BG2": "gray86", "BG3": "gray64", "FG1": "white", "FG2": "black", "FG3": "black"}, "Vintage1": {"BG1": "#8E3200", "BG2": "#D7A86E", "BG3": "#A64B2A", "FG1": "white", "FG2": "black", "FG3": "black"}, "Vintage2": {"BG1": "#362706", "BG2": "#464E2E", "BG3": "#ACB992", "FG1": "white", "FG2": "white", "FG3": "black"}} **newset={"Greg1": {"BG1": "gray54", "BG2": "gray86", "BG3": "gray64", "FG1": "white", "FG2": "black", "FG3": "black"}, "Vintage1": {"BG1": "#8E3200", "BG2": "#D7A86E", "BG3": "#A64B2A", "FG1": "white", "FG2": "black", "FG3": "black"}, "Vintage2": {"BG1": "#362706", "BG2": "#464E2E", "BG3": "#ACB992", "FG1": "white", "FG2": "white", "FG3": "black"}}
Ligne 48: Ligne 91:
  
 In order to support the TNotebook and the TButton, we have to supply a map that will allow the various background colors and foreground colors (shown top right).** In order to support the TNotebook and the TButton, we have to supply a map that will allow the various background colors and foreground colors (shown top right).**
 +
 +newset={"Greg1": {"BG1": "gray54", "BG2": "gray86", "BG3": "gray64", "FG1": "white", "FG2": "black", "FG3": "black"}, "Vintage1": {"BG1": "#8E3200", "BG2": "#D7A86E", "BG3": "#A64B2A", "FG1": "white", "FG2": "black", "FG3": "black"}, "Vintage2": {"BG1": "#362706", "BG2": "#464E2E", "BG3": "#ACB992", "FG1": "white", "FG2": "white", "FG3": "black"}}
 +
 +Maintenant, nous créons la fonction qui appliquera les jeux de couleurs qui seront utilisés à tous les widgets qui se trouvent sur votre formulaire.
 +
 +La première chose que nous devons faire dans la fonction est d'appliquer un style ttk (montré ci-dessous). Dans notre cas, nous utiliserons le style « par défaut ». Cependant, vous pouvez le changer pour n'importe quel style supporté par votre système. Ensuite, nous créons un certain nombre de listes qui utilisent les classes de widgets pour tous les widgets possibles. Il y a une liste pour les widgets qui ne supportent pas la propriété active background, une autre qui contient les widgets qui ne supportent pas la propriété foreground (qui n'est qu'un cadre, mais il pourrait y en avoir d'autres à l'avenir), puis nous créons une liste de tous les widgets ttk et enfin une liste de tous les widgets qui peuvent être des conteneurs.
 +
 +Afin de supporter TNotebook et TButton, nous devons fournir une carte qui permettra différentes couleurs d'arrière-plan et d'avant-plan (montré en haut à droite).
 +
  
 **At this point, we can get a list of all children of the Toplevel form. Once we have the list, we try to set all the background and foreground colors for those widgets (shown bottom right). **At this point, we can get a list of all children of the Toplevel form. Once we have the list, we try to set all the background and foreground colors for those widgets (shown bottom right).
Ligne 60: Ligne 112:
  
 Toplevel.update()** Toplevel.update()**
 +
 +À ce stade, nous pouvons obtenir une liste de tous les enfants du formulaire Toplevel. Une fois que nous avons la liste, nous essayons de définir toutes les couleurs d'arrière-plan et d'avant-plan pour ces widgets (en bas à droite).
 +
 +Pendant que nous travaillons avec ce widget, nous vérifions s'il y a des enfants et nous essayons d'appliquer les couleurs d'arrière-plan et d'avant-plan de ces derniers (voir page suivante, en haut à droite).
 +
 +Nous vérifions ensuite les widgets spécifiques qui doivent faire l'objet d'une gestion particulière, comme les widgets TFrame, Treeview, TScrollbars et TLabel (voir page suivante, au milieu à droite).
 +
 +Enfin, nous pouvons nous occuper de tous les widgets tk « standard ». Encore une fois, nous devons vérifier si le widget supporte les propriétés foreground et active background (voir page suivante, en bas à droite).
 +
 +Dernier point important, nous faisons une mise à jour du formulaire Toplevel pour que tous les changements soient visibles.
 +
 +Toplevel.update()
 +
  
 **This form may be imported into your project. It is named ColorSetImport.py. Now in your own project, you should import it like this. **This form may be imported into your project. It is named ColorSetImport.py. Now in your own project, you should import it like this.
Ligne 80: Ligne 145:
  
 Until next time, as always; stay safe, healthy, positive and creative!** Until next time, as always; stay safe, healthy, positive and creative!**
 +
 +Ce formulaire peut être importé dans votre projet. Il est nommé ColorSetImport.py. Dans votre propre projet, vous devez l'importer comme ceci :
 +
 +from ColorSetImport import newset, do_tk_widgets
 +
 +Si votre projet prend en charge plus d'un jeu de couleurs dans le dictionnaire newset, vous devrez déterminer le jeu de couleurs à utiliser et l'affecter à un jeu de couleurs global. La ligne suivante suppose que vous utiliserez le premier jeu de couleurs du dictionnaire.
 +
 +colorset=newset[0]
 +
 +Enfin, pour appliquer le jeu de couleurs, il suffit d'appeler la fonction do_tk_widgets :
 +
 +    do_tk_widgets(_top1, colorset)
 +
 +où le premier paramètre est le nom du formulaire et le deuxième le jeu de couleurs sélectionné.
 +
 +Il y a un programme de démonstration qui montre comment cela fonctionne (à gauche).
 +
 +J'ai mis tout le code source sur mon dépôt github à https://github.com/gregwa1953/FCM-185. 
 +
 +Jusqu'à la prochaine fois, comme toujours, restez en sécurité, en bonne santé, positif et créatif !
 +
 +
 +// Texte en noir dans l'encadré de la page 24 //
 +
 +**To load the colorset into the program at startup, we read the pickle file and assign the colorset to the global master.**
 +
 +Pour charger au démarrage le jeu de couleurs dans le programme, nous lisons le fichier pickle et assignons le jeu de couleurs au maître global.
 +
 +// Texte en noir dans l'encadré de la page 25 //
 +
 +**Next, we set the background for the Toplevel widget**
 +
 +Ensuite, nous réglons l'arrière-plan du widget Toplevel
 +
 +// Texte en noir dans l'encadré de la page 26 //
 +
 +**Now we can set “global” background and foreground colors by using the “.” widget class.**
 +
 +Maintenant, nous réglons les couleurs « globales » d'avant et d'arrière-plans en utilisant la classe de widget « . ».
issue185/python.1664773519.txt.gz · Dernière modification : 2022/10/03 07:05 de d52fr