Outils pour utilisateurs

Outils du site


issue162: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
issue162:python [2020/11/06 08:53] d52frissue162:python [2020/11/07 14:43] (Version actuelle) andre_domenech
Ligne 5: Ligne 5:
 $ pip install tksheet** $ pip install tksheet**
  
-Lemmois dernier, un utilisateur de PAGE s'est addressé à Don et à moi pour être aider sur une bobliothèque Python assez récente qui implémente un tableur comme un gadget tableau, écrit complètement en Python. Il était assez débutant sur PAGE et il avait du mal à initialiser correctement la table. J'ai pensé que la bibliothèque a une quantité énorme de possibilités ; j'ai donc pensé que je devrais partager ces informations avec vous. Comme vous le savez bien, vous n'avez pas besoin d'utiliser PAGE pour implémenter le gadget table, mais vous devez au moins utiliser Tkinter.+Le mois dernier, un utilisateur de PAGE s'est adressé à Don et à moi pour être aidé sur une bibliothèque Python assez récente qui implémente un tableur comme un gadget tableau, écrit complètement en Python. Il était assez débutant sur PAGE et il avait du mal à initialiser la table correctement. J'ai pensé que la bibliothèque a une quantité énorme de possibilités ; j'ai donc pensé que je devrais partager ces informations avec vous. Simplement pour que vous le sachiez, vous n'avez pas besoin d'utiliser PAGE pour implémenter le gadget tableau, mais vous devez au moins utiliser Tkinter.
  
 Pour commencer, vous devons installer la bibliothèque et, comme d'habitude, nous pouvons utiliser Pip pour ça. Pour commencer, vous devons installer la bibliothèque et, comme d'habitude, nous pouvons utiliser Pip pour ça.
Ligne 19: Ligne 19:
 import tkinter as tk** import tkinter as tk**
  
-Une fois que vous l'avez fait, vous voudrez peut-être voir à télécharger tout le code source depuis le dépôt github à https://github.com/ragardner/tksheet.  Je vous suggère cela car cette bibliothèque a tant de possibilités que vous pourriez ne pas en attraper certaines sans fouiller dans le code source. La documentation sur cette bibliothèque est cours de rédaction ; aussi, il est facile de découvrir comment utiliser certaines options en ayant le code à disposition.+Une fois que vous l'avez fait, vous envisagerez peut-être de télécharger tout le code source depuis le dépôt github à https://github.com/ragardner/tksheet. Je vous suggère cela car cette bibliothèque a tant de possibilités que vous pourriez ne pas en voir certaines sans fouiller dans le code source. La documentation sur cette bibliothèque est en cours de rédaction ; aussi, il est facile de découvrir comment utiliser certaines options en ayant le code à disposition.
  
 Au début, nous utiliserons une version modifiée du programme de démonstration, qui ne nécessite pas PAGE. Vous en trouvez la version complète sur la page d'accueil du dépôt. Au début, nous utiliserons une version modifiée du programme de démonstration, qui ne nécessite pas PAGE. Vous en trouvez la version complète sur la page d'accueil du dépôt.
Ligne 37: Ligne 37:
 Comme presque toujours, nous voulons importer les bibliothèques primordiales, dans notre cas, les bibliothèques tksheet et tkinter. Comme presque toujours, nous voulons importer les bibliothèques primordiales, dans notre cas, les bibliothèques tksheet et tkinter.
  
-Maintenant (en haut à droite), nous créerons une classe appelée demo. Elle contiendra tout le code du programme de démo qui a un rapport avec le gadget tableur. Quand vous parcourrez le code, vous verrez que beaucoup des fonction qui suivent sont simplement là pour vous permettre de personnaliser les fonctions intégrées dans la bibliothèque.+Maintenant (en haut à droite), nous créerons une classe appelée demo. Elle contiendra tout le code du programme de démo qui a un rapport avec le gadget feuille de calcul. Quand vous parcourrez le code, vous verrez que beaucoup des fonctions qui suivent sont simplement là pour vous permettre de personnaliser les fonctions intégrées dans la bibliothèque.
  
-Comme vous le savez déjà, la fonction __init__ fixe de nombreux paramètres et valeurs par défauts. Dans les lignes suivantes, l'objet sheet est simplement une instance de Sheet (ci-dessus).+Comme vous le savez déjà, la fonction __init__ fixe de nombreux paramètres et valeurs par défaut. Dans les lignes suivantes, l'objet sheet est simplement une instance de Sheet (ci-dessus).
  
 Voici (ci-dessous) où vous chargez les données fictives dans le tableur. Voici (ci-dessous) où vous chargez les données fictives dans le tableur.
Ligne 52: Ligne 52:
 As you can tell from the commented code (bottom right), the next set of lines show ways to control various things like the theme, highlighting columns, rows and cells, etc.** As you can tell from the commented code (bottom right), the next set of lines show ways to control various things like the theme, highlighting columns, rows and cells, etc.**
  
-Ensuite, (page suivante, en haut à droite), nous activons les liens variés qui sont déjà codés dans la bibliothèque.+Ensuite, (page suivante, en haut à droite), nous activons les divers liens qui sont déjà codés dans la bibliothèque.
  
 Les deux lignes suivantes insèrent les objets frame et sheet dans la grille Tkinter. Les deux lignes suivantes insèrent les objets frame et sheet dans la grille Tkinter.
Ligne 59: Ligne 59:
 self.sheet.grid(row=0, column=0, sticky="nswe") self.sheet.grid(row=0, column=0, sticky="nswe")
  
-Comme vous pouvez le lire dans les lignes commentées (en bas à droite), le jeu de lignes suivants montrent les manières de contrôler diverses choses comme le thème, les colonnes surlignées, les lignes et les cellules, etc.+Comme vous pouvez le lire dans les lignes commentées (en bas à droite), le jeu suivant de lignes montre les manières de contrôler diverses choses comme le thème, les colonnes surlignées, les lignes et les cellules, etc.
  
 **The rest of the code (next page, right side) overrides the default events and bindings, and provides examples of how to handle them in your own code. **The rest of the code (next page, right side) overrides the default events and bindings, and provides examples of how to handle them in your own code.
Ligne 75: Ligne 75:
 Le reste du code (page suivante, côté droit) écrase les évènements et les liens par défaut et fournit des exemples de comment les manipuler dans votre propre code. Le reste du code (page suivante, côté droit) écrase les évènements et les liens par défaut et fournit des exemples de comment les manipuler dans votre propre code.
  
-Enfin, l'instanciation nécessaire de l'objet de la classe demo et l'appel à la boucle principale de Tkinter.+Enfin, il y a l'instanciation nécessaire de l'objet de la classe demo et l'appel à la boucle principale de Tkinter.
  
 app = demo() app = demo()
Ligne 83: Ligne 83:
 Quand vous lancez le programme, vous devez voir quelque chose qui ressemble à l'image de la page suivante (en haut à droite). Quand vous lancez le programme, vous devez voir quelque chose qui ressemble à l'image de la page suivante (en haut à droite).
  
-Bien que ça ne soit pas dur du tout, je crois que l'utilisation de PAGE facilite beaucoup plus le traitementJ'ai créé une interface utilisateur TRÈS simple avec PAGE pour montrer rapidement comme c'est rapide et facile.+Bien que ça ne soit pas difficile du tout, je crois que l'utilisation de PAGE facilite beaucoup plus le traitementJ'ai créé une interface utilisateur TRÈS simple avec PAGE pour montrer comme c'est rapide et facile.
  
 **Create a folder to hold your project and start up PAGE within that folder. Expand the default Top level form just a bit and place two buttons near the very top of the form, one on the left and one on the right. The left one should have the text “Load CSV”, and the one on the right “Exit”. In the command attribute for the left button enter “on_btnLoad” and for the right button “on_btnExit”. (We’ve covered PAGE programming so often, this should be very obvious, but if it isn’t, look at one of my previous articles about using PAGE. My article in FCM#155 should be a good easy reference). **Create a folder to hold your project and start up PAGE within that folder. Expand the default Top level form just a bit and place two buttons near the very top of the form, one on the left and one on the right. The left one should have the text “Load CSV”, and the one on the right “Exit”. In the command attribute for the left button enter “on_btnLoad” and for the right button “on_btnExit”. (We’ve covered PAGE programming so often, this should be very obvious, but if it isn’t, look at one of my previous articles about using PAGE. My article in FCM#155 should be a good easy reference).
Ligne 89: Ligne 89:
 Next, place a frame in the form that takes up pretty much of the rest of the form. Then place a custom widget into that frame and expand it to fill the frame. (Mouse-3 (Right-click for most people)) | Widget | Fill Container). Save your project as tksheetGUI.tcl and generate your python code.** Next, place a frame in the form that takes up pretty much of the rest of the form. Then place a custom widget into that frame and expand it to fill the frame. (Mouse-3 (Right-click for most people)) | Widget | Fill Container). Save your project as tksheetGUI.tcl and generate your python code.**
  
-Créez un dossier pour contenir votre projet et démarrez PAGE dans ce dosier. Agrandissez un petit peu le formulaire par défaut de niveau le plus haut et placez deux boutons presque en haut du formulaire, un à gauche et l'autre à droite. Celui de gauche devra avoir le texte « Load CSV » (Charger un CSV) et celui de droite « Exit » (Sortie). Dans l'attribut de commande du bouton gauche entrez « on_btnLoad » et pour le bouton de droite « on_btnExit ». (nous avons parlé si souvent de la programmation avec PAGE que ça devrait être évident ; si ça ne l'est pas, regardez un de mes articles précédents sur PAGE. Mon article du FCM n° 155 devrait être une bonne et facile référence).+Créez un dossier pour contenir votre projet et démarrez PAGE dans ce dossier. Agrandissez un petit peu le formulaire par défaut de niveau le plus haut et placez deux boutons presque en haut du formulaire, un à gauche et l'autre à droite. Celui de gauche aura le texte « Load CSV » (Charger un CSV) et celui de droite « Exit » (Sortie). Dans l'attribut de commande du bouton gauche entrez « on_btnLoad » et pour le bouton de droite « on_btnExit ». (Nous avons parlé si souvent de la programmation avec PAGE que ça devrait être évident ; si ça ne l'est pas, regardez un de mes articles précédents sur PAGE. L'article dans le FCM n° 155 devrait être une bonne et facile référence.)
  
 Ensuite, placez un cadre dans le formulaire pour qu'il occupe la majeure partie de ce qui reste. Puis placez un gadget personnalisé dans le cadre et agrandissez-le pour remplir le cadre. (Souris-3 (en général, le clic droit) | Widget | Fill Container). Sauvegardez votre projet sous le nom tksheetGUI.tcl et générez votre code Python. Ensuite, placez un cadre dans le formulaire pour qu'il occupe la majeure partie de ce qui reste. Puis placez un gadget personnalisé dans le cadre et agrandissez-le pour remplir le cadre. (Souris-3 (en général, le clic droit) | Widget | Fill Container). Sauvegardez votre projet sous le nom tksheetGUI.tcl et générez votre code Python.
Ligne 109: Ligne 109:
 En bas à droite, voici ce à quoi, j'espère, votre projet ressemble. Si ce n'est pas le cas, c'est bon quand même. Vous avez l'idée générale. En bas à droite, voici ce à quoi, j'espère, votre projet ressemble. Si ce n'est pas le cas, c'est bon quand même. Vous avez l'idée générale.
  
-Maintenant, ouvrez tksheet_support.py  dans votre IDE ou votre éditeur et au travail.+Maintenant, ouvrez tksheet_support.py dans votre IDE ou votre éditeuret au travail
 + 
 +PAGE ne crée qu'une unique ligne d'import car c'est tout ce dont vous avez besoin pour commencer. Ajoutez les lignes suivantes à la section import du code pour supporter vos besoins. La ligne que PAGE nous fournit n'est pas en gras.
  
-PAGE ne crée qu'une unique ligne d'import car c'est tout ce dont vous avez besoin pour commencer. Ajoutez les lignes suivantes à la section import du code pour supporter vos besoins. La ligne Que PAGE nous fournit n'est pas en gras. 
 import sys import sys
 import platform import platform
Ligne 137: Ligne 138:
 from tkinter import filedialog** from tkinter import filedialog**
  
-Nous devons aussi modifier la section import que PAGE nous fournit. Normalement, vous ne devriez pas avoir besoin de faire ça, mais nous allons ajouter un support à la « messagebox » (champ de message) de Tkinter et aux sous-systèmes filedialog.+Nous devons aussi modifier la section import que PAGE nous fournit. Normalement, vous ne devriez pas avoir besoin de le faire, mais nous allons ajouter du support à la « messagebox » (champ de message) de Tkinter et aux sous-systèmes filedialog.
  
 import Tkinter as tk import Tkinter as tk
Ligne 161: Ligne 162:
 Yes, there is some code that isn't strictly needed, but I like to add it. Basically, we get and provide the python version, program path and program version, and print all of that to the terminal window. Then we set up some global default values for use with the tksheet library.** Yes, there is some code that isn't strictly needed, but I like to add it. Basically, we get and provide the python version, program path and program version, and print all of that to the terminal window. Then we set up some global default values for use with the tksheet library.**
  
-Notez que nous ne faisons vraiment rien avec  messagebox mais elle est là pour de possibles développements futurs.+Notez que nous ne faisons vraiment rien avec messageboxmais elle est là pour de possibles développements futurs.
  
-Maintenant (en haut à droite), nous devons ajouter quelques lignes pour la fonction int, que PAGE, là encore, nous fournit.+Maintenant (en haut à droite), nous devons ajouter quelques lignes pour la fonction init, que PAGE, là encore, nous fournit.
  
 Comme vous le savez, j'en suis sûr, ceci (au milieu à droite) appellera les fonctions startup() et init_custom() avant que le formulaire soit montré à l'utilisateur. Regardons d'abord la fonction startup. Comme vous le savez, j'en suis sûr, ceci (au milieu à droite) appellera les fonctions startup() et init_custom() avant que le formulaire soit montré à l'utilisateur. Regardons d'abord la fonction startup.
  
-Oui, il y a du code qui n'est pas strictement nécessaire, mais j'aime l'ajouter. En gros, nous obtenons et fournissons la version de Python, le chemin du programme et sa version, et nous imprimons tout ça dans la fenêtre de terminal. Ensuite, nous paramétrons les valeurs globales par défaut pour les utiliser avec la bilbiothèque tksheet.+Oui, il y a du code qui n'est pas strictement nécessaire, mais j'aime l'ajouter. En gros, nous obtenons et fournissons la version de Python, le chemin du programme et sa version, et nous imprimons tout ça dans la fenêtre du terminal. Ensuite, nous paramétrons les valeurs globales par défaut pour les utiliser avec la bilbiothèque tksheet.
  
 **In the init_custom() function, we will be initializing various settings of the tksheet for our use. It took me a fair amount of time to narrow down the actual settings needed for proper demo use. There are many other settings as you saw in the earlier demo program, but, for us, these are needed. One thing to note is the theme setting (see below). There are four default themes defined by default. The first demo used the light green theme. For the PAGE version, we will use the dark blue theme. **In the init_custom() function, we will be initializing various settings of the tksheet for our use. It took me a fair amount of time to narrow down the actual settings needed for proper demo use. There are many other settings as you saw in the earlier demo program, but, for us, these are needed. One thing to note is the theme setting (see below). There are four default themes defined by default. The first demo used the light green theme. For the PAGE version, we will use the dark blue theme.
Ligne 177: Ligne 178:
 Dans la fonction init_custom(), nous initialiserons divers paramètres de tksheet pour notre usage. Ça m'a pris un bon moment pour me limiter aux paramètres vraiment nécessaires pour une utilisation correcte de la démo. Il y a de nombreux autres paramètres comme vous l'avez vu dans le programme de démo précédent, mais, pour nous, ceux-là sont nécessaires. Une chose à noter, c'est le paramètre du thème (voir ci-dessous). Il y a quatre thèmes définis par défaut. La première démo utilise le thème vert clair. Pour la version avec PAGE, nous utiliserons le thème bleu foncé. Dans la fonction init_custom(), nous initialiserons divers paramètres de tksheet pour notre usage. Ça m'a pris un bon moment pour me limiter aux paramètres vraiment nécessaires pour une utilisation correcte de la démo. Il y a de nombreux autres paramètres comme vous l'avez vu dans le programme de démo précédent, mais, pour nous, ceux-là sont nécessaires. Une chose à noter, c'est le paramètre du thème (voir ci-dessous). Il y a quatre thèmes définis par défaut. La première démo utilise le thème vert clair. Pour la version avec PAGE, nous utiliserons le thème bleu foncé.
  
-Maintenant (en haut à droite), nous devons activer les liens que que nous voulons pour que la fonctionnalité soit ce que nous en attendons pour une démo de tableur. Il y a des choses comme la sélection d'une seule cellule, d'une ligne ou d'une colonne et l'utilisation des touches fléchées tout comme d'autoriser le support du menu contextuel pour le clic droit (mouse 3).+Maintenant (en haut à droite), nous devons activer les liens que nous voulons pour que la fonctionnalité soit ce que nous en attendons d'une démo de tableur. Il y a des choses comme la sélection d'une seule cellule, d'une ligne ou d'une colonne et l'utilisation des touches fléchées tout comme d'autoriser le support du menu contextuel pour le clic droit (souris 3).
  
-Les quelques lignes suivantes (en bas à droite) vous permettent d'utiliser le menu contextuel sous forme d'info-bulle. Certaines d'entre elles sont bien évidentes, mais la nécessité des dernières lignes n'est pas vraiement claire. +Les quelques lignes suivantes (en bas à droite) vous permettent d'utiliser le menu contextuel sous forme d'info-bulle. Certaines d'entre elles sont bien évidentes, mais la nécessité des six dernières lignes n'est pas aussi claire. 
  
 **The last part of the init_custom function (bottom right) deals with binding the Mouse-3 button to the “rc” routine and sets extra bindings for us to be able to override the default functions within the library. **The last part of the init_custom function (bottom right) deals with binding the Mouse-3 button to the “rc” routine and sets extra bindings for us to be able to override the default functions within the library.
Ligne 187: Ligne 188:
 I created a simple class to handle the actual tksheet as a custom control. See next page, bottom right.** I created a simple class to handle the actual tksheet as a custom control. See next page, bottom right.**
  
-La dernière partie de la fonction init_custom (en bas à droite) a trait aux liens de lu bouton Souris-3 avec la routine « rc » et paramètre des liens supplémentaires pour que nous soyons capables de remplacer les fonctions par défaut de la bibliothèque.+La dernière partie de la fonction init_custom (en bas à droite) a trait aux liens du bouton Souris-3 avec la routine « rc » et paramètre des liens supplémentaires pour que nous soyons capables de remplacer les fonctions par défaut de la bibliothèque.
  
-Maintenant (page suivante, en haut à droite), nous créons les quatre fonctions de rappel que nous venons de définir. Je dois admettre que j'ai créé les trois premières pour une démo différente qui imprimait les informations sur une étiquette d'état, mais j'ai senti que pour cette très simple démo l'impression sur un terminal sera OK.+Maintenant (page suivante, en haut à droite), nous créons les quatre fonctions de rappel que nous venons de définir. Je dois admettre que j'ai créé les trois premières pour une démo différente qui imprimait les informations sur une étiquette d'état, mais j'ai senti quepour cette très simple démol'impression sur un terminal était correcte.
  
 **Almost at the end now. We still have to assign the library as the custom control. PAGE supplies a line that says “Custom = tk.Frame”, but we need to replace tk.Frame with our external tkinter control library. You can add the following line and comment out the ‘Custom = tk.Frame’ line. **Almost at the end now. We still have to assign the library as the custom control. PAGE supplies a line that says “Custom = tk.Frame”, but we need to replace tk.Frame with our external tkinter control library. You can add the following line and comment out the ‘Custom = tk.Frame’ line.
Ligne 197: Ligne 198:
 Finally, we need to provide the callback and support functions for the buttons that we defined when we designed the GUI (next page, top right). PAGE generated the first two functions for us as skeletons. The final function helps the import of the CSV files. You already have seen the proper way to end a PAGE application, but I’ve included it here for your convenience.** Finally, we need to provide the callback and support functions for the buttons that we defined when we designed the GUI (next page, top right). PAGE generated the first two functions for us as skeletons. The final function helps the import of the CSV files. You already have seen the proper way to end a PAGE application, but I’ve included it here for your convenience.**
  
-Nous arrivons presque à la fin. Nous devons encore assigné la bibliothèque comme étant le contrôle personnalisé. PAGE fournit une ligne qui dit « Custom = tk.Frame », mais nous devons remplacer tk.frame par notre bibliotèque de contrôle de tkinter externe. Vous pouvez ajouter la ligne suivante et commenter la ligne « Custom = tk.Frame ».+Nous arrivons presque à la fin. Nous devons encore assigner la bibliothèque comme étant le contrôle personnalisé. PAGE fournit une ligne qui dit « Custom = tk.Frame », mais nous devons remplacer tk.Frame par notre bibliothèque de contrôle de tkinter externe. Vous pouvez ajouter la ligne suivante et commenter la ligne « Custom = tk.Frame ».
  
 Custom = sheet Custom = sheet
  
-Enfin, nous avons besoin de fournir les fonctions de rappel et de support des boutons que nous avons définies quand nous avons dessiné l'interface utilisateur (page suivante, en haut à droite). PAGE génère les squelettes des deux premières fonctions pour nous. La dernière fonction aide à l'importation des fichiers CVS. Vous avez déjà vu la manière correcte de terminer une application PAGE, mais je l'ai incluse ici, à votre disposition. +Enfin, nous devons fournir les fonctions de rappel et de support des boutons que nous avons définies quand nous avons conçu l'interface utilisateur (page suivante, en haut à droite). PAGE génère les squelettes des deux premières fonctions pour nous. La dernière fonction aide à l'importation des fichiers CVS. Vous avez déjà vu la manière correcte de terminer une application PAGE, mais je l'ai incluse ici, à votre disposition. 
  
 **Now (next page, middle) we have the callback for the load csv file button. It’s a little bloated, but I thought it would be easier for you to follow the code this way rather than write it more elegantly.  **Now (next page, middle) we have the callback for the load csv file button. It’s a little bloated, but I thought it would be easier for you to follow the code this way rather than write it more elegantly. 
Ligne 211: Ligne 212:
 Last but not least (again!), you need to know where a good CSV file is. For this demo, I have used the titanic3.csv file which is provided with the source code for the Pandastable Library. I’m certain it’s been released into the public domain. I copied it and put it into the development folder for quick access.** Last but not least (again!), you need to know where a good CSV file is. For this demo, I have used the titanic3.csv file which is provided with the source code for the Pandastable Library. I’m certain it’s been released into the public domain. I copied it and put it into the development folder for quick access.**
  
-Maintenant (page suivante, au milieu), nous avons le rappel pour le bouton de chargement du fichier CSV.C'est un peu exagéré, mais j'ai pensé qu'il vous serait plus facile de suivre le code de cette façon plutôt qu'en l'écrivant de manière plus élégante.+Maintenant (page suivante, au milieu), nous avons le rappel pour le bouton de chargement du fichier CSV. C'est un peu exagéré, mais j'ai pensé qu'il vous serait plus facile de suivre le code de cette façon plutôt qu'en l'écrivant de manière plus élégante.
  
-Dernier point, mais non des moindres (encore !), nous avons besoin de savoir où trouver un bon fichier CSV. Pour cette démo, j'ai utilisé le fichier titanic3.csv qui est fournit avec le code source pour la bibliothèque Pandastable. Je suis certain qu'il est du domaine public. Je l'ai copié et je l'ai mis dans le dossier de développement pour un accès rapide.+Dernier point, mais non des moindres (encore !), nous avons besoin de savoir où trouver un bon fichier CSV. Pour cette démo, j'ai utilisé le fichier titanic3.csv qui est fourni avec le code source pour la bibliothèque Pandastable. Je suis certain qu'il est du domaine public. Je l'ai copié et je l'ai mis dans le dossier de développement pour un accès rapide.
  
 **Once you run the program, it should look something like this: **Once you run the program, it should look something like this:
Ligne 223: Ligne 224:
 As always, until next time; stay safe, healthy, positive and creative!** As always, until next time; stay safe, healthy, positive and creative!**
  
-Quand vous lancez le programme, vous devriez voir quelque chose comme ça :+Quand vous lancez le programme, vous devriez voir quelque chose comme ceci :
  
-J'espère que vous avez aimé le projet de ce mois autant moi en le créant. La bibliothèque a beaucoup de possibilités et sera très bien pour l'affichage rapide de choses sous forme de table ou de feuille de calcul. Cependant, il n'y a pas de code pour réécrire dans un fichier (c'est assez simple pour que vous le rélasiez par vous-même) et il n'y a aucune fonctions de calcul pour le moment. Mais c'est une bibliothèque fantastique et on en avait besoin depuis longtemps !+J'espère que vous avez aimé le projet de ce mois autant que moi en le créant. La bibliothèque a beaucoup de possibilités et sera très bien pour l'affichage rapide de choses sous forme de table ou de feuille de calcul. Cependant, il n'y a pas de code pour réécrire dans un fichier (c'est suffisament simple pour que vous le réalisiez par vous-même) et il n'y a aucune fonction de calcul pour le moment. Mais c'est une bibliothèque fantastique et on en avait besoin depuis longtemps !
  
-Comme je l'ai fait une fois précédemment, j'ai créé un dépôt sur github pour contenir le code et les images de cet article. Vous pouvez la trouver à https://github.com/gregwa1953/FCM162 .+Comme je l'ai fait une fois précédemment, j'ai créé un dépôt sur github pour conserver le code et les images de cet article. Vous pouvez le trouver à https://github.com/gregwa1953/FCM162 .
  
-Comme toujours, à la prochaine fois ; restez sains, en bonne santé, positifs et créatifs !+Comme toujours, à la prochaine fois ; soyez prudentrestez en bonne santé, positif et créatif !
  
issue162/python.1604649239.txt.gz · Dernière modification : 2020/11/06 08:53 de d52fr