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/07 09:55] auntieeissue162:python [2020/11/07 14:43] (Version actuelle) andre_domenech
Ligne 5: Ligne 5:
 $ pip install tksheet** $ pip install tksheet**
  
-Le mois dernier, un utilisateur de PAGE s'est adressé à Don et à moi pour être aider 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. Au cas où vous ne le savez pas, vous n'avez pas besoin d'utiliser PAGE pour implémenter le gadget tableau, 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 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 traitement. J'ai créé une interface utilisateur TRÈS simple avec PAGE pour montrer 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 traitement. J'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 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 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 éditeur, et 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 le faire, 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 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 (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 vraiment 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 189: Ligne 190:
 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. 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 était correcte.+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 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 ».+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 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 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 ! 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 conserver le code et les images de cet article. Vous pouvez le 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 saufs, en bonne santé, positifs et créatifs !+Comme toujours, à la prochaine fois ; soyez prudentrestez en bonne santé, positif et créatif !
  
issue162/python.1604739351.txt.gz · Dernière modification : 2020/11/07 09:55 de auntiee