Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue207:python [2024/07/29 08:42] – d52fr | issue207:python [2024/07/29 17:44] (Version actuelle) – auntiee |
---|
Calculatrice simple dans PAGE | Calculatrice simple dans PAGE |
| |
Re-bonjour à tous les formes de vie sensibles. Les choses ici, sur la plate-forme d'atterrissage 2997 de Terra, ne se sont pas du tout calmées depuis le mois dernier. Au contraire, l'activité est encore plus intense. Il semble (à cette heure, vendredi 5 juillet) que nous aurons un visiteur indésirable du nom de l'ouragan Beryl. À ce stade, les chances sont très bonnes (ou mauvaises si vous le souhaitez) que nous recevions au moins une visite en voiture. Je vais devoir demander à l'équipe au sol de s'assurer que le bateau est bien arrimé et sécurisé. Mais cela ne m'empêchera pas de partager des informations avec vous. | Re-bonjour à tous les formes de vie sensibles. Les choses ici, sur la plateforme d'atterrissage 2997 de Terra, ne se sont pas du tout calmées depuis le mois dernier. Au contraire, l'activité est encore plus intense. Il semble (à cette heure, vendredi 5 juillet) que nous aurons un visiteur indésirable du nom de l'ouragan Beryl. À ce stade, les chances sont très bonnes (ou mauvaises si vous le préférez) que nous recevions au moins une courte visite de la dame. Je vais devoir demander à l'équipe au sol de s'assurer que le bateau est bien arrimé et sécurisé. Mais cela ne m'empêchera pas de partager des informations avec vous. |
| |
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'utilisation d'un excellent concepteur d'interface graphique comme PAGE (et l'un d'entre eux était derrière un paywall (ICK)), alors j'ai pensé que je devais jeter mes deux centimes dans le mélange. | 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'utilisation d'un excellent concepteur d'interface graphique comme PAGE (et l'un d'entre eux était derrière un paywall (berck)), alors j'ai pensé que je devais jeter mes deux centimes dans le mélange. |
| |
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 ». | 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 ». |
Exigences de base | Exigences de base |
| |
Les exigences de base de notre projet seront donc de créer une calculatrice « 4 banger ». Comme l'expression « 4 banger » remonte aux premiers jours des calculatrices électroniques (années 1970), il se peut que vous ne sachiez pas ce que cela signifie. Pour faire simple, il s'agit d'une calculatrice qui ne fait que des additions, des soustractions, des multiplications et des divisions. C'est tout. Pas de fonction mod, pas de parenthèses, pas même de fonction racine carrée ou de pourcentage. Bien sûr, vous pouvez ajouter ces fonctions vous-même si vous le souhaitez, mais je voulais créer un projet vraiment rapide de sorte que mon article ne prenne pas la moitié du magazine. | Les exigences de base de notre projet seront donc de créer une calculatrice « 4 banger ». Comme l'expression « 4 banger » remonte aux premiers jours des calculatrices électroniques (les années 1970), il se peut que vous ne sachiez pas ce que cela signifie. Pour faire simple, il s'agit d'une calculatrice qui ne fait que des additions, des soustractions, des multiplications et des divisions. C'est tout. Pas de fonction mod, pas de parenthèses, pas même de fonction racine carrée ou de pourcentage. Bien sûr, vous pouvez ajouter ces fonctions vous-même si vous le souhaitez, mais je voulais créer un projet vraiment rapide de sorte que mon article ne prenne pas la moitié du magazine. |
| |
Bien sûr, puisque c'est moi, nous utiliserons PAGE 8.0 pour concevoir le formulaire de l'interface graphique. Je ne vais même pas m'étendre sur la création du formulaire dans PAGE, mais seulement sur certains points importants. Nous n'utiliserons pas de graphiques, seulement du texte sur les boutons. Les seuls « caractères spéciaux » que nous utiliserons sont le caractère « ⌫ » pour la touche d'effacement (U+232B) et le « ÷ » pour la touche de division (U+00F7). | Bien sûr, puisque c'est moi, nous utiliserons PAGE 8.0 pour concevoir le formulaire de l'interface graphique. Je ne vais même pas m'étendre sur la création du formulaire dans PAGE, mais seulement sur certains points importants. Nous n'utiliserons pas de graphiques, seulement du texte sur les boutons. Les seuls « caractères spéciaux » que nous utiliserons sont le caractère « <X] » pour la touche d'effacement (U+232B) et le « ÷ » pour la touche de division (U+00F7). |
| |
| |
$ 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'appliquera à tous les TButtons, et un fond légèrement plus sombre pour les faire ressortir un peu de l'arrière-plan du formulaire. | 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'appliquera à tous les TButtons et un fond légèrement plus sombre pour les faire ressortir un peu de l'arrière-plan du formulaire. |
| |
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'attribut command à chacun des TButtons. | 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'attribut command à chacun des TButtons. |
Création de l'interface graphique PAGE | Création de l'interface graphique PAGE |
| |
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'ensemble du dossier cornsilk dans le dossier themes. Maintenant, dans une fenêtre de terminal, tapez | 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'ensemble du dossier cornsilk, dans le dossier themes. Maintenant, dans une fenêtre du terminal, tapez |
| |
$ page calc1 | $ page calc1 |
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 absolu afin que le formulaire ne soit pas redimensionné. | 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'arrière-plan sur « white », le relief sur « sunken », l'ancrage sur « w », la textvar sur « Display » et la police sur « DejaVu Sans », size=20 et weight=bold. | Ajoutez un widget TLabel à x=2, y=60, avec une hauteur de 50 et une largeur de 356. Réglez la couleur d'arrière-plan sur « white », le relief sur « sunken », l'ancrage sur « w », la textvar sur « Display » et la police sur « DejaVu Sans », size=20 et weight=bold. |
| |
Ensuite, placez un widget TButton à x=10, y=140, height=49 et width=62. Puis, définissez le texte à « 7 ». Enfin, définissez l'attribut command à « lambda : on_numKey(7) ». Le thème s'occupera de tous les autres attributs, et nous remplacerons certains d'entre eux lorsque nous créerons notre thème plus tard dans le module _support. | Ensuite, placez un widget TButton à x=10, y=140, height=49 et width=62. Puis, définissez le texte à « 7 ». Enfin, définissez l'attribut command à « lambda : on_numKey(7) ». Le thème s'occupera de tous les autres attributs et nous remplacerons certains d'entre eux lorsque nous créerons notre thème plus tard dans le module _support. |
| |
Maintenant, ajoutez 10 autres widgets TButton en les alignant dans une orientation « clavier » comme dans l'image ci-dessus. Définissez le texte avec le numéro approprié pour cette touche et la commande à « lambda : on_numKey(X) » où X est le numéro de la touche (ou simplement '.' pour la touche point). Veillez à utiliser des guillemets simples lorsque vous utilisez la zone de texte de l'attribut de commande PAGE). | Maintenant, ajoutez 10 autres widgets TButton en les alignant dans une orientation « clavier » comme dans l'image ci-dessus. Définissez le texte avec le numéro approprié pour cette touche et la commande à « lambda : on_numKey(X) » où X est le numéro de la touche (ou simplement '.' pour la touche point). Veillez à utiliser des guillemets simples lorsque vous utilisez la zone de texte de l'attribut de commande PAGE). |
Votre Toplevel devrait ressembler à ceci... | 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'arrière-plan autre que la couleur cornsilk3, que le thème contient. | Vous pouvez fermer PAGE à ce stade. Encore une fois, aucun des boutons n'a de police en gras ou d'arrière-plan autre que la couleur cornsilk3, qui se trouve dans le thème. |
| |
Le code | Le code |
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'utilisateur clique sur le bouton « Equal », nous prenons simplement la chaîne que nous avons construite depuis le début et nous utilisons la fonction eval de Python. | Maintenant... la partie de la fonction qui fait que tout fonctionne. C'est le cas « Equal ». Lorsque l'utilisateur clique sur le bouton « Equal », nous prenons simplement la chaîne que nous construisons depuis le début et nous utilisons la fonction eval de Python. |
| |
Ainsi, si l'utilisateur clique sur les boutons « 2 », « + », « 2 », puis appuie sur la touche « Equal », la variable dbuf sera « 2+2 » et la fonction eval pourra la traiter comme un énoncé mathématique. Par conséquent, la réponse est (bien sûr) 4. | Ainsi, si l'utilisateur clique sur les boutons « 2 », « + », « 2 », puis appuie sur la touche « Equal », la variable dbuf sera « 2+2 » et la fonction eval pourra la traiter comme un énoncé mathématique. Par conséquent, la réponse est (bien sûr) 4. |
| |
C'est simple, mais ce n'est en aucun cas à l'épreuve des balles. Je n'ai inclus aucune sorte de contrôle d'erreur. J'ai bien précisé au début qu'il s'agissait d'un programme de calcul SIMPLE. | C'est simple, mais ce n'est en aucun cas à l'épreuve des balles. Je n'ai inclus aucun genre de contrôle d'erreur. J'ai bien précisé au début qu'il s'agissait d'un programme de calculatrice SIMPLE. |
| |
Vous pouvez trouver le dépôt à https://github.com/gregwa1953/FCM207 qui contient toutes les informations dont vous avez besoin pour exécuter le programme, y compris les fichiers PAGE, le dossier et les fichiers du thème, et le code Python. | Vous pouvez trouver le dépôt à https://github.com/gregwa1953/FCM207 qui contient toutes les informations dont vous avez besoin pour exécuter le programme, y compris les fichiers PAGE, le dossier et les fichiers du thème, et le code Python. |