issue162: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 | ||
issue162:python [2020/11/04 08:05] – d52fr | issue162:python [2020/11/07 14:43] (Version actuelle) – andre_domenech | ||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
$ pip install tksheet** | $ pip install tksheet** | ||
- | Lemmois | + | Le mois dernier, un utilisateur de PAGE s' |
Pour commencer, vous devons installer la bibliothèque et, comme d' | Pour commencer, vous devons installer la bibliothèque et, comme d' | ||
Ligne 19: | Ligne 19: | ||
import tkinter as tk** | import tkinter as tk** | ||
- | Une fois que vous l'avez fait, vous voudrez | + | Une fois que vous l'avez fait, vous envisagerez |
Au début, nous utiliserons une version modifiée du programme de démonstration, | Au début, nous utiliserons une version modifiée du programme de démonstration, | ||
Ligne 35: | Ligne 35: | ||
Here (below) is where you load the dummy data into the sheet.** | Here (below) is where you load the dummy data into the sheet.** | ||
- | Comme presque toujours, nous voulons importer les blibliothèques | + | Comme presque toujours, nous voulons importer les bibliothèques |
- | 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 | + | 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 |
- | Comme vous le savez déjà, la fonction __init__ fixe de nombreux paramètres et valeurs par défauts. Dans les lignes suivantes, l' | + | Comme vous le savez déjà, la fonction __init__ fixe de nombreux paramètres et valeurs par défaut. Dans les lignes suivantes, l' |
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 | + | Ensuite, (page suivante, en haut à droite), nous activons les divers |
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, | self.sheet.grid(row=0, | ||
- | Comme vous pouvez le lire dans les lignes commentées (en bas à droite), le jeu de lignes | + | Comme vous pouvez le lire dans les lignes commentées (en bas à droite), le jeu suivant |
**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 72: | Ligne 72: | ||
While that wasn’t too hard at all, I believe that using PAGE makes the process much easier. I’ve created a VERY simple PAGE GUI to show how quickly and easy it is.** | While that wasn’t too hard at all, I believe that using PAGE makes the process much easier. I’ve created a VERY simple PAGE GUI to show how quickly and easy it is.** | ||
+ | |||
+ | 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, il y a l' | ||
+ | |||
+ | app = demo() | ||
+ | |||
+ | app.mainloop() | ||
+ | |||
+ | Quand vous lancez le programme, vous devez voir quelque chose qui ressemble à l' | ||
+ | |||
+ | Bien que ça ne soit pas difficile du tout, je crois que l' | ||
**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). | ||
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 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' | ||
+ | |||
+ | 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. | ||
**Bottom right is what your project hopefully looks like. If not, that’s ok. You get the general idea. | **Bottom right is what your project hopefully looks like. If not, that’s ok. You get the general idea. | ||
Ligne 90: | Ligne 106: | ||
from tksheet import Sheet | from tksheet import Sheet | ||
import pandas as pd** | import pandas as pd** | ||
+ | |||
+ | En bas à droite, voici ce à quoi, j' | ||
+ | |||
+ | Maintenant, ouvrez tksheet_support.py dans votre IDE ou votre éditeur, et au travail. | ||
+ | |||
+ | PAGE ne crée qu'une unique ligne d' | ||
+ | |||
+ | import sys | ||
+ | import platform | ||
+ | import os | ||
+ | |||
+ | # Third party libraries - Bibliothèques tierces | ||
+ | from tksheet import Sheet | ||
+ | import pandas as pd | ||
+ | |||
**We also need to modify the import section that PAGE provides for us. Normally, you would not need to do this, but we are going to add support for the Tkinter messagebox and the filedialog sub-systems. | **We also need to modify the import section that PAGE provides for us. Normally, you would not need to do this, but we are going to add support for the Tkinter messagebox and the filedialog sub-systems. | ||
Ligne 106: | Ligne 137: | ||
from tkinter import filedialog** | from tkinter import filedialog** | ||
+ | |||
+ | Nous devons aussi modifier la section import que PAGE nous fournit. Normalement, | ||
+ | |||
+ | import Tkinter as tk | ||
+ | |||
+ | import tkFileDialog as filedialog | ||
+ | |||
+ | import tkMessageBox as messagebox | ||
+ | |||
+ | except ImportError: | ||
+ | |||
+ | import tkinter as tk | ||
+ | |||
+ | from tkinter import messagebox | ||
+ | |||
+ | from tkinter import filedialog | ||
**Note that we actually don’t do anything with the messagebox but it’s there for your possible future development. | **Note that we actually don’t do anything with the messagebox but it’s there for your possible future development. | ||
Ligne 114: | Ligne 161: | ||
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. | ||
+ | |||
+ | 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' | ||
+ | |||
+ | Oui, il y a du code qui n'est pas strictement nécessaire, | ||
**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 120: | Ligne 175: | ||
The next few lines (bottom right) allow you to use the popup context menu. Some of them are pretty obvious, but it’s not as clear why the last 6 lines would be needed.** | The next few lines (bottom right) allow you to use the popup context menu. Some of them are pretty obvious, but it’s not as clear why the last 6 lines would be needed.** | ||
+ | |||
+ | Dans la fonction init_custom(), | ||
+ | |||
+ | 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' | ||
+ | |||
+ | Les quelques lignes suivantes (en bas à droite) vous permettent d' | ||
**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 127: | 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.** | ||
- | **Almost at the end now. We still have to assign the library as the custom control. PAGE supplies | + | La dernière partie de la fonction init_custom (en bas à droite) |
+ | 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' | ||
+ | |||
+ | **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”, | ||
Custom = sheet | Custom = sheet | ||
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, | 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, | ||
+ | |||
+ | 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 | ||
+ | |||
+ | Enfin, nous devons fournir les fonctions de rappel et de support des boutons que nous avons définies quand nous avons conçu l' | ||
**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 141: | Ligne 211: | ||
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' | ||
+ | |||
+ | 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 149: | Ligne 223: | ||
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 ceci : | ||
+ | |||
+ | J' | ||
+ | |||
+ | Comme je l'ai fait une fois précédemment, | ||
+ | |||
+ | Comme toujours, à la prochaine fois ; soyez prudent, restez en bonne santé, positif et créatif ! | ||
issue162/python.1604473514.txt.gz · Dernière modification : 2020/11/04 08:05 de d52fr