issue207:python
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
issue207:python [2024/07/29 07:09] – d52fr | issue207:python [2024/07/29 17:44] (Version actuelle) – auntiee | ||
---|---|---|---|
Ligne 6: | Ligne 6: | ||
Within the article, I’ll show you a couple of tricks that can be used within PAGE, or from just Tkinter if you want to “do it the hard way”.** | Within the article, I’ll show you a couple of tricks that can be used within PAGE, or from just Tkinter if you want to “do it the hard way”.** | ||
+ | |||
+ | Calculatrice simple dans PAGE | ||
+ | |||
+ | Re-bonjour à tous les formes de vie sensibles. Les choses ici, sur la plateforme d' | ||
+ | |||
+ | Ce mois-ci, je vais vous aider à créer une simple calculatrice avec PAGE 8.0, Tkinter. Pourquoi ? Eh bien, le mois dernier, j'ai vu deux articles différents sur la création d'une calculatrice simple en Tkinter et en Wxpython, mais rien sur l' | ||
+ | |||
+ | Dans cet article, je vous montrerai quelques astuces qui peuvent être utilisées avec PAGE, ou simplement avec Tkinter si vous voulez « faire les choses à la dure ». | ||
+ | |||
**Just because I’m a nice guy (according to some people), I’ve set up a github repository for you that you can download the entire project which includes all the PAGE files and Python files – so you don’t really have to deal with PAGE if you don’t want to. The URL for the repository can be found at the end of the article. | **Just because I’m a nice guy (according to some people), I’ve set up a github repository for you that you can download the entire project which includes all the PAGE files and Python files – so you don’t really have to deal with PAGE if you don’t want to. The URL for the repository can be found at the end of the article. | ||
Ligne 14: | Ligne 23: | ||
Of course, since it’s me, we will use PAGE 8.0 to design the GUI form. I’m not even going to go into depth on creating the form in PAGE, just some of the highlights. We won’t be using any graphics, only text on the buttons. The only “special characters” we will be using are the “< | Of course, since it’s me, we will use PAGE 8.0 to design the GUI form. I’m not even going to go into depth on creating the form in PAGE, just some of the highlights. We won’t be using any graphics, only text on the buttons. The only “special characters” we will be using are the “< | ||
+ | |||
+ | Juste parce que je suis un gars sympa (selon certaines personnes), j'ai mis en place un dépôt github pour vous permettre de télécharger le projet entier qui comprend tous les fichiers PAGE et les fichiers Python - ainsi vous n'avez pas vraiment à vous occuper de PAGE si vous ne le souhaitez pas. L'URL du dépôt se trouve à la fin de l' | ||
+ | |||
+ | Exigences de base | ||
+ | |||
+ | Les exigences de base de notre projet seront donc de créer une calculatrice « 4 banger ». Comme l' | ||
+ | |||
+ | Bien sûr, puisque c'est moi, nous utiliserons PAGE 8.0 pour concevoir le formulaire de l' | ||
+ | |||
**Since we will be using PAGE 8.0, we’ll use one of the themes I created for it named “cornsilk-light”. Since we will be concentrating more on the Python code instead of the PAGE portion, I’ll give you a small function that will modify that theme to create a bold 18-point font that will apply to all the TButtons, and a slightly darker background to make them stand out from the background of the form a little bit. | **Since we will be using PAGE 8.0, we’ll use one of the themes I created for it named “cornsilk-light”. Since we will be concentrating more on the Python code instead of the PAGE portion, I’ll give you a small function that will modify that theme to create a bold 18-point font that will apply to all the TButtons, and a slightly darker background to make them stand out from the background of the form a little bit. | ||
Ligne 26: | Ligne 44: | ||
$ page calc1** | $ page calc1** | ||
+ | |||
+ | Comme nous allons utiliser PAGE 8.0, nous allons utiliser l'un des thèmes que j'ai créé pour lui, nommé « cornsilk-light ». Comme nous allons nous concentrer sur le code Python plutôt que sur la partie PAGE, je vais vous donner une petite fonction qui va modifier ce thème pour créer une police de 18 points en gras qui s' | ||
+ | |||
+ | Pour les boutons, nos fonctions de rappel seront un peu spéciales, puisque je vais utiliser la fonction lambda pour envoyer une « définition de clé » via l' | ||
+ | |||
+ | Le projet fini devrait ressembler à ceci... | ||
+ | |||
+ | Création de l' | ||
+ | |||
+ | Nous allons donc devoir créer un dossier pour contenir notre projet PAGE et le dossier themes pour contenir les fichiers du thème cornsilk-light. Copiez ensuite le fichier cornsilk-light.tcl depuis le dossier themes de PAGE 8.0 (ou depuis les fichiers du dépôt), ainsi que l' | ||
+ | |||
+ | $ page calc1 | ||
+ | |||
**Now, set your Toplevel form to width=359 and height to 467. Set the title to “Calc1”. Make sure that you are in the Absolute mode so the form won’t resize. | **Now, set your Toplevel form to width=359 and height to 467. Set the title to “Calc1”. Make sure that you are in the Absolute mode so the form won’t resize. | ||
Ligne 36: | Ligne 67: | ||
Now, add 6 more TButtons, and set their text as seen in the image above. For the clear and divide keys, there’s a file in the repo called symbols.txt that has the two symbols. Just copy each and paste them into the text attribute column.** | Now, add 6 more TButtons, and set their text as seen in the image above. For the clear and divide keys, there’s a file in the repo called symbols.txt that has the two symbols. Just copy each and paste them into the text attribute column.** | ||
+ | |||
+ | Maintenant, réglez votre formulaire Toplevel sur une largeur de 359 et une hauteur de 467. Fixez le titre à « Calc1 ». Assurez-vous que vous êtes en mode Absolute afin que le formulaire ne soit pas redimensionné. | ||
+ | |||
+ | Ajoutez un widget TLabel à x=2, y=60, avec une hauteur de 50 et une largeur de 356. Réglez la couleur d' | ||
+ | |||
+ | Ensuite, placez un widget TButton à x=10, y=140, height=49 et width=62. Puis, définissez le texte à « 7 ». Enfin, définissez l' | ||
+ | |||
+ | Maintenant, ajoutez 10 autres widgets TButton en les alignant dans une orientation « clavier » comme dans l' | ||
+ | |||
+ | Ajoutez maintenant 6 autres boutons TB et définissez leur texte comme indiqué dans l' | ||
+ | |||
**At this point, the final step is to enter each of the command line attributes. The one for the Divide button would be “lambda : on_funcKey(‘Divide’)”. From there the text for the command attribute sets would be: | **At this point, the final step is to enter each of the command line attributes. The one for the Divide button would be “lambda : on_funcKey(‘Divide’)”. From there the text for the command attribute sets would be: | ||
Ligne 56: | Ligne 98: | ||
PAGE created the majority of the program for us, but we still need to flesh the skeletons out.** | PAGE created the majority of the program for us, but we still need to flesh the skeletons out.** | ||
+ | |||
+ | À ce stade, la dernière étape consiste à saisir chacun des attributs de la ligne de commande. Celui du bouton Diviser serait « lambda : on_funcKey(' | ||
+ | |||
+ | lambda : on_funcKey(' | ||
+ | lambda : on_funcKey(' | ||
+ | lambda : on_funcKey(' | ||
+ | lambda : on_funcKey(' | ||
+ | lambda : on_funcKey(' | ||
+ | |||
+ | Une fois que vous avez défini toutes vos clés, sauvegardez votre projet sous le nom « calc1 » et générez le fichier GUI.py et le module Support. | ||
+ | |||
+ | Votre Toplevel devrait ressembler à ceci... | ||
+ | |||
+ | Vous pouvez fermer PAGE à ce stade. Encore une fois, aucun des boutons n'a de police en gras ou d' | ||
+ | |||
+ | Le code | ||
+ | |||
+ | Nous pouvons maintenant commencer à créer nos fonctions et nos rappels dans le module de support (« calc1_support.py »). | ||
+ | |||
+ | PAGE a créé la majorité du programme pour nous, mais nous devons encore étoffer les squelettes. | ||
+ | |||
**First, we need to add an import statement. Near the top of the file are all of the import statements. Just after the “from tkinter.constants import *” line, you need to add | **First, we need to add an import statement. Near the top of the file are all of the import statements. Just after the “from tkinter.constants import *” line, you need to add | ||
Ligne 68: | Ligne 131: | ||
The first task we do is clear the ‘Display’ Label widget by calling the .set() method of the Label widget. Then we define a global variable named “dbuf” and set it to an empty string. After that, we call a function called set_button_fonts(), | The first task we do is clear the ‘Display’ Label widget by calling the .set() method of the Label widget. Then we define a global variable named “dbuf” and set it to an empty string. After that, we call a function called set_button_fonts(), | ||
+ | |||
+ | Tout d' | ||
+ | |||
+ | from tkinter.font import Font | ||
+ | |||
+ | C'est parce que nous allons définir une police « personnalisée » dans un petit moment. | ||
+ | |||
+ | Ensuite, descendez jusqu' | ||
+ | |||
+ | À ce stade, nous devons ajouter le code de la fonction de démarrage. J'ai l' | ||
+ | |||
+ | La première chose à faire est d' | ||
+ | |||
**Here is the set_button_fonts() function. As you can see from the comments, we create an instance of the ttk.style object, define a new font using “DejaVu Sans”, font size 18 points and weight bold, and assign that a name of “myFont”. Then we call the style.configuration method to set the font to myFont and the background to “cornsilk4” to every TButton widget in the project. Finally we call the update function for the Toplevel to make sure it is done before we show it to the user. | **Here is the set_button_fonts() function. As you can see from the comments, we create an instance of the ttk.style object, define a new font using “DejaVu Sans”, font size 18 points and weight bold, and assign that a name of “myFont”. Then we call the style.configuration method to set the font to myFont and the background to “cornsilk4” to every TButton widget in the project. Finally we call the update function for the Toplevel to make sure it is done before we show it to the user. | ||
Ligne 76: | Ligne 152: | ||
lambda : on_numKey(4)** | lambda : on_numKey(4)** | ||
+ | |||
+ | Voici la fonction set_button_fonts(). Comme vous pouvez le voir dans les commentaires, | ||
+ | |||
+ | À ce stade, il ne nous reste plus que deux fonctions à gérer. Il s'agit des rappels pour les boutons qui composent le groupe « numKey » et pour ceux qui composent le groupe « funcKey ». Le rappel on_numKey est VRAIMENT facile (ci-dessous). | ||
+ | |||
+ | Nous ajoutons simplement la valeur envoyée par le bouton dans la fonction on_numKey à la variable dbuf et l' | ||
+ | |||
+ | lambda : on_numKey(4) | ||
+ | |||
**When it gets to the on_numKey, it is sent in to the *args, which contains all the arguments as a list. Since we are sending in only one value, it will come in as args[0]. That is converted into a string. | **When it gets to the on_numKey, it is sent in to the *args, which contains all the arguments as a list. Since we are sending in only one value, it will come in as args[0]. That is converted into a string. | ||
Ligne 87: | Ligne 172: | ||
For the Clear function, we simply set the TLabel widget and the dbuf variable to an empty string (shown right).** | For the Clear function, we simply set the TLabel widget and the dbuf variable to an empty string (shown right).** | ||
+ | |||
+ | Lorsqu' | ||
+ | |||
+ | Malheureusement, | ||
+ | |||
+ | La première chose que nous faisons est d' | ||
+ | |||
+ | Ainsi, pour la fonction « Add », nous ajoutons un « + » à la chaîne et ainsi de suite. Nous l' | ||
+ | |||
+ | Pour la fonction Clear, nous définissons simplement le widget TLabel et la variable dbuf à une chaîne vide (illustrée à droite). | ||
+ | |||
**Now… the part of the function that makes everything work. That’s the “Equal” case. When the user clicks on the Equal button, we simply take the string that we’ve been building all along and then use python’s eval function. | **Now… the part of the function that makes everything work. That’s the “Equal” case. When the user clicks on the Equal button, we simply take the string that we’ve been building all along and then use python’s eval function. | ||
Ligne 97: | Ligne 193: | ||
Until next time, as always; stay safe, healthy, positive and creative!** | Until next time, as always; stay safe, healthy, positive and creative!** | ||
+ | |||
+ | Maintenant... la partie de la fonction qui fait que tout fonctionne. C'est le cas « Equal ». Lorsque l' | ||
+ | |||
+ | Ainsi, si l' | ||
+ | |||
+ | C'est simple, mais ce n'est en aucun cas à l' | ||
+ | |||
+ | Vous pouvez trouver le dépôt à https:// | ||
+ | |||
+ | Jusqu' | ||
+ |
issue207/python.1722229763.txt.gz · Dernière modification : 2024/07/29 07:09 de d52fr