Outils pour utilisateurs

Outils du site


issue193: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
issue193:python [2023/05/29 08:47] d52frissue193:python [2023/05/31 12:15] (Version actuelle) auntiee
Ligne 30: Ligne 30:
 So the first thing that needs to happen is to create an object that inherits from the ttk.Style base object. After many hours of struggling to come up with a name for my version of the object, I finally settled on “style”. Pretty cool, huh? Anyway, that joke probably fell flat, so we’ll move on.** So the first thing that needs to happen is to create an object that inherits from the ttk.Style base object. After many hours of struggling to come up with a name for my version of the object, I finally settled on “style”. Pretty cool, huh? Anyway, that joke probably fell flat, so we’ll move on.**
  
-J'espère que cela vous donne déjà quelques idées sur la façon dont cela pourrait vous être utile dans vos propres programmes. C'est en fait très facile à faire et, avec le thème que j'ai créé, vous pouvez personnaliser l'ensemble des thèmes en fonction de vos humeurs. Nous reviendrons plus en détail sur le thème le mois prochain. Pour l'instant, voyons comment changer la position des onglets sur le TNotebook.+J'espère que cela vous donne déjà quelques idées sur la façon dont cela pourrait vous être utile dans vos propres programmes. C'est en fait très facile à faire et, avec le thème que j'ai créé, vous pouvez personnaliser le paquet des thèmes en fonction de vos humeurs. Nous reviendrons plus en détail sur le thème le mois prochain. Pour l'instant, voyons comment changer la position des onglets sur le TNotebook.
  
-Le TNotebook dispose d'une option peu connue (enfin, probablement peu connue de la plupart des programmeurs Tkinter) qui permet au programmeur de définir la position de la partie Tab du widget TNotebook. Elle fait partie des options de ttk Style. Malheureusement, la page de manuel Tcl pour le widget TNotebook mentionne que seule la possibilité de définir la position est disponible. Elle ne dit rien sur les différents paramètres « légaux ». Nous allons donc commencer par la fonction qui fait tout le travail (voir page suivante, en haut à droite).+Le TNotebook dispose d'une option peu connue (enfin, probablement peu connue de la plupart des programmeurs Tkinter) qui permet au programmeur de définir la position de la partie Tab du widget TNotebook. Elle fait partie des options de ttk Style. Malheureusement, la page du manuel Tcl pour le widget TNotebook mentionne que seule la possibilité de définir la position est disponible. Elle ne dit rien sur les différents paramètres « légaux ». Nous allons donc commencer par la fonction qui fait tout le travail (voir page suivante, en haut à droite).
  
-La première chose à faire est donc de créer un objet qui hérite de l'objet de base ttk.Style. Après de nombreuses heures passées à chercher un nom pour ma version de l'objet, j'ai finalement opté pour « style ». Plutôt cool, non ? Quoi qu'il en soit, cette blague est probablement tombée à plat, nous allons donc passer à autre chose.+La première chose à faire est donc de créer un objet qui hérite de l'objet de base ttk.Style. Après de nombreuses heures passées à chercher un nom pour ma version de l'objet, j'ai finalement opté pour « style ». Plutôt cool, non ? Quoi qu'il en soit, cette blague n'est probablement pas très bonne et nous allons donc passer à autre chose.
  
  
Ligne 49: Ligne 49:
 The next function that we will take a look at is the callback function that is called whenever a TRadiobutton is clicked. Just so you know, all the TRadiobuttons have the same callback and the values of the TRadiobuttons are set 1 to 12. This makes it easy to use an if tree. It would be just as easy to use the switch case tree, but since that is available only from 3.10 forward, I decided to stick with the if tree (see code right).** The next function that we will take a look at is the callback function that is called whenever a TRadiobutton is clicked. Just so you know, all the TRadiobuttons have the same callback and the values of the TRadiobuttons are set 1 to 12. This makes it easy to use an if tree. It would be just as easy to use the switch case tree, but since that is available only from 3.10 forward, I decided to stick with the if tree (see code right).**
  
-La partie suivante de la fonction n'est probablement pas utile pour ce programme particulier, puisque toutes les décisions relatives à la position sont fournies par les TRadiobuttons. Cependant, si vous avez l'intention d'ajouter cette fonction à l'un de vos programmes, vous devriez la conserver, car il est facile de commettre des erreurs.+La partie suivante de la fonction n'est probablement pas utile pour ce programme-ci, puisque toutes les décisions relatives à la position sont fournies par les TRadiobuttons. Cependant, si vous avez l'intention d'ajouter cette fonction à l'un de vos programmes, vous devriez la conserver, car il est facile de commettre des erreurs.
  
-La liste des positions est fournie pour vérifier que le paramètre passé est bien l'une des positions « légales ». Nous vérifions si le paramètre fait partie de la liste des positionset si c'est le cas, nous utilisons la commande Style.configure. La syntaxe est la suivante+La liste des positions est fournie pour vérifier que le paramètre passé est bien l'une des positions « légales ». Nous vérifions si le paramètre fait partie de la liste des positions etsi c'est le cas, nous utilisons la commande Style.configure. La syntaxe est la suivante :
  
 style.configure(TWidget name, StyleOption = Value, …) style.configure(TWidget name, StyleOption = Value, …)
Ligne 59: Ligne 59:
 C'est là toute la magie qui a rarement été documentée. C'est là toute la magie qui a rarement été documentée.
  
-La fonction suivante que nous allons examiner est la fonction de rappel qui est appelée chaque fois qu'un TRadiobutton est cliqué. Pour votre information, tous les TRadiobuttons ont la même fonction de rappel et les valeurs des TRadiobuttons sont comprises entre 1 et 12. Il est donc facile d'utiliser un arbre if. Il serait tout aussi facile d'utiliser l'arbre switch case, mais comme il n'est disponible qu'à partir de la version 3.10, j'ai décidé de m'en tenir à l'arbre if (voir le code à droite).+La fonction suivante que nous allons examiner est la fonction de rappel qui est appelée chaque fois qu'on clique sur TRadiobutton. Pour votre information, tous les TRadiobuttons ont la même fonction de rappel et les valeurs des TRadiobuttons sont comprises entre 1 et 12. Il est donc facile d'utiliser un arbre if. Il serait tout aussi facile d'utiliser l'arbre switch case, mais comme il n'est disponible qu'à partir de la version 3.10, j'ai décidé de m'en tenir à l'arbre if (voir le code à droite).
  
  
Ligne 93: Ligne 93:
 **The first few lines simply set up some general styling things (which we’ll discuss next month) and calls an imported Python module that I created and named mystyles_dark. This was an experiment I played around with back in December 2022. The idea was to create a Python based Theme for Tkinter programs. If you remember, a ttk Theme is simply a collection of styles that apply to various ttk widgets. I never got around to finishing that project, since once I got the basics of getting the styles for various widgets going, I then put the Python file on the back burner and dived head first into writing a true Tcl/Tk theme in Tcl. (That was an experience, let me tell you! Well, actually that story is going in a blog on my website.) Anyway, I digress. The Python style module has only one function, which is create_styles() which handles all of the stylings. It requires the style object (in this case sty (actually a better name than style, huh? Less to type!)). By calling it, all the widgets it has code for (most of the ttk library) is now styled to a fairly dark color. I then grab the background color from the Python styling library and assign that to a global variable (background1). Then I call the TNotebook Tab styling routine. The frames that make up the “pages” of the TNotebook, are coloured by calling the function color_notebook_pages(). I then set the background through style.configure to be the same background as the rest of the project. All the labels, since I mix Tk Labels and ttk.TLabels on the pages of the TNotebook need to be set to proper background and foreground colors, which is what the function fix_labels() does. Finally, I make sure that the Tabs positions are set to the default position and set the title for the project and center it into the screen (code shown top right).** **The first few lines simply set up some general styling things (which we’ll discuss next month) and calls an imported Python module that I created and named mystyles_dark. This was an experiment I played around with back in December 2022. The idea was to create a Python based Theme for Tkinter programs. If you remember, a ttk Theme is simply a collection of styles that apply to various ttk widgets. I never got around to finishing that project, since once I got the basics of getting the styles for various widgets going, I then put the Python file on the back burner and dived head first into writing a true Tcl/Tk theme in Tcl. (That was an experience, let me tell you! Well, actually that story is going in a blog on my website.) Anyway, I digress. The Python style module has only one function, which is create_styles() which handles all of the stylings. It requires the style object (in this case sty (actually a better name than style, huh? Less to type!)). By calling it, all the widgets it has code for (most of the ttk library) is now styled to a fairly dark color. I then grab the background color from the Python styling library and assign that to a global variable (background1). Then I call the TNotebook Tab styling routine. The frames that make up the “pages” of the TNotebook, are coloured by calling the function color_notebook_pages(). I then set the background through style.configure to be the same background as the rest of the project. All the labels, since I mix Tk Labels and ttk.TLabels on the pages of the TNotebook need to be set to proper background and foreground colors, which is what the function fix_labels() does. Finally, I make sure that the Tabs positions are set to the default position and set the title for the project and center it into the screen (code shown top right).**
  
-Les premières lignes mettent simplement en place quelques éléments de style généraux (dont nous parlerons le mois prochain) et appellent un module Python importé que j'ai créé et nommé mystyles_dark. Il s'agit d'une expérience avec laquelle j'ai joué en décembre 2022. L'idée était de créer un thème basé sur Python pour les programmes Tkinter. Si vous vous souvenez, un thème ttk est simplement une collection de styles qui s'appliquent à divers widgets ttk. Je n'ai jamais pu terminer ce projet, car une fois que j'ai réussi à créer les styles de base pour les différents widgets, j'ai mis le fichier Python en veilleuse et j'ai plongé tête la première dans l'écriture d'un vrai thème Tcl/Tk en Tcl. (C'était une expérience, laissez-moi vous le dire ! En fait, cette histoire va faire l'objet d'un blog sur mon site Web). Mais je m'éloigne du sujet. Le module de style Python n'a qu'une seule fonction, create_styles(), qui gère tous les styles. Elle nécessite l'objet style (dans ce cas sty (en fait un meilleur nom que style, hein ? Moins à taper !)). En l'appelant, tous les widgets pour lesquels il a du code (la plupart de la bibliothèque ttk) sont maintenant stylisés dans une couleur assez sombre. Je récupère ensuite la couleur d'arrière-plan de la bibliothèque de style Python et je l'affecte à une variable globale (background1). J'appelle ensuite la routine de stylisation de l'onglet TNotebook. Les cadres qui constituent les « pages » du TNotebook sont colorés en appelant la fonction color_notebook_pages(). Je règle ensuite l'arrière-plan par le biais de style.configure pour qu'il soit le même que celui du reste du projet. Toutes les étiquettes, puisque je mélange les Tk Labels et les ttk.TLabels sur les pages du TNotebook, doivent être colorées avec les couleurs d'arrière-plan et d'avant-plan appropriées, ce que fait la fonction fix_labels(). Enfin, je m'assure que la position des onglets est réglée sur la position par défaut, je définis le titre du projet et je le centre dans l'écran (code affiché en haut à droite).+Les premières lignes mettent simplement en place quelques éléments de style généraux (dont nous parlerons le mois prochain) et appellent un module Python importé que j'ai créé et nommé mystyles_dark. Il s'agit d'une expérience avec laquelle j'ai joué en décembre 2022. L'idée était de créer un thème basé sur Python pour les programmes Tkinter. Si vous vous souvenez, un thème ttk est simplement une collection de styles qui s'appliquent à divers widgets ttk. Je n'ai jamais pu terminer ce projet, car une fois que j'ai réussi à créer les styles de base pour les différents widgets, j'ai mis le fichier Python en veilleuse et j'ai plongé tête la première dans l'écriture d'un vrai thème Tcl/Tk en Tcl. (C'était une vraie expérience, croyez-moi ! En fait, cette histoire va faire l'objet d'un blog sur mon site Web). Mais je m'éloigne du sujet. Le module de style Python n'a qu'une seule fonction, create_styles(), qui gère tous les styles. Elle nécessite l'objet style (dans ce cas sty (en fait un meilleur nom que style, hein ? Moins à taper !)). En l'appelant, tous les widgets pour lesquels il a du code (la plupart de la bibliothèque ttk) sont maintenant stylisés dans une couleur assez sombre. Je récupère ensuite la couleur d'arrière-plan de la bibliothèque de style Python et je l'affecte à une variable globale (background1). J'appelle ensuite la routine de stylisation de l'onglet TNotebook. Les cadres qui constituent les « pages » du TNotebook sont colorés en appelant la fonction color_notebook_pages(). Je règle ensuite l'arrière-plan par le biais de style.configure pour qu'il soit le même que celui du reste du projet. Toutes les étiquettes, puisque je mélange les Tk Labels et les ttk.TLabels sur les pages du TNotebook, doivent être colorées avec les couleurs d'arrière-plan et d'avant-plan appropriées, ce que fait la fonction fix_labels(). Enfin, je m'assure que la position des onglets est réglée sur la position par défaut, je définis le titre du projet et je le centre dans l'écran (code affiché en haut à droite).
  
  
Ligne 106: Ligne 106:
 NOTE TARDIVE : NOTE TARDIVE :
  
-Après avoir écrit cet article, je suis retourné voir le module mystyles.dark. J'ai dit qu'à peu près dès que je l'avais mis dans son état actuel, je l'avais mis en veilleuse pour travailler sur le fichier de thème tcl. Quand je l'ai regardé avec un peu d'esprit critique, j'ai remarqué que le module manquait de nombreux widgets ttk et que ce qu'il y avait était si minime qu'il était pratiquement inutile en dehors de la définition de l'arrière-plan et du premier plan pour CERTAINS widgets. Ces derniers jours, j'ai donc modifié le module en profondeur. La version que j'ai utilisée dans le programme d'exemple de l'article était la 2.04. Les modifications portent maintenant sur la version 2.05.7𝛽 . J'ai remplacé l'original dans le dépôt par la dernière version. Il y a quelques fonctions supplémentaires dans le module en plus de la fonction create_styles(). Afin de styliser correctement la boîte TCombo (du moins dans mon esprit), la partie déroulante doit avoir le même arrière-plan et le même avant-plan que le champ de saisie. Pour ce faire, cependant, il doit y avoir quelques appels qui exigent que les options connaissent la racine ou le widget de niveau supérieur.+Après avoir écrit cet article, je suis retourné voir le module mystyles.dark. J'ai dit qu'à peu près dès que je l'avais mis dans son état actuel, je l'avais mis en veilleuse pour travailler sur le fichier de thème tcl. Quand je l'ai regardé avec un peu d'esprit critique, j'ai remarqué que le module manquait de nombreux widgets ttk et que ce qu'il y avait était si minime qu'il était pratiquement inutile en dehors de la définition de l'arrière-plan et de l'avant-plan pour CERTAINS widgets. Ces derniers jours, j'ai donc modifié le module en profondeur. La version que j'ai utilisée dans le programme d'exemple de l'article était la 2.04. Les modifications portent maintenant sur la version 2.05.7𝛽 . J'ai remplacé l'original dans le dépôt par la dernière version. Il y a quelques fonctions supplémentaires dans le module en plus de la fonction create_styles(). Afin de styliser correctement la boîte TCombo (du moins dans mon esprit), la partie déroulante doit avoir le même arrière-plan et le même avant-plan que le champ de saisie. Pour ce faire, cependant, il doit y avoir quelques appels qui exigent que les options connaissent le widget racine ou Toplevel.
  
  
issue193/python.1685342850.txt.gz · Dernière modification : 2023/05/29 08:47 de d52fr