issue86: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 | ||
issue86:python [2014/12/30 21:55] – [15] fredphil91 | issue86:python [2014/12/31 17:50] (Version actuelle) – d52fr | ||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
You will also need two image files. One is a simple grey rectangle 500x400 pixels. You can use GIMP or some other image manipulating program to create it. Name it default.jpg, | You will also need two image files. One is a simple grey rectangle 500x400 pixels. You can use GIMP or some other image manipulating program to create it. Name it default.jpg, | ||
- | Voici la deuxième partie d'un long tutoriel sur la création d'un générateur de motifs de point de croix. Dans la première partie (FCM 85), nous avons créé une base de données contenant les couleurs de fils DMC™ avec leurs valeurs RVB les plus proches. Dans cette partie, nous allons créer l' | + | Voici la deuxième partie d'un long tutoriel sur la création d'un générateur de motifs de point de croix. Dans la première partie (le FCM n° 85), nous avons créé une base de données contenant les couleurs de fils DMC™ avec leurs valeurs RVB les plus proches. Dans cette partie, nous allons créer l' |
- | Vous aurez également besoin de deux fichiers images. L'un est un simple rectangle gris de 500x400 pixels. Vous pouvez utiliser GIMP ou un autre programme de manipulation d'image pour le créer. Nommez-le default.jpg, | + | Vous aurez également besoin de deux fichiers images. L'un est un simple rectangle gris de 500x400 pixels. Vous pouvez utiliser GIMP ou un autre programme de manipulation d'images |
====== 2 ====== | ====== 2 ====== | ||
Ligne 15: | Ligne 15: | ||
Now we are ready to start working on the code. Here is our long list of imports...** | Now we are ready to start working on the code. Here is our long list of imports...** | ||
- | Ci-dessus | + | Ci-dessous |
- | Maintenant, nous sommes prêts à commencer à travailler sur le code. Voici notre longue liste des importations... | + | Maintenant, nous pouvons |
====== 3 ====== | ====== 3 ====== | ||
Ligne 73: | Ligne 73: | ||
Nous allons créer une classe pour contenir tout le code de l' | Nous allons créer une classe pour contenir tout le code de l' | ||
- | Nous avons d' | + | Nous avons d' |
====== 5 ====== | ====== 5 ====== | ||
Ligne 87: | Ligne 87: | ||
self.DefaultImage =ImageTk.PhotoImage(self.Apercu(" | self.DefaultImage =ImageTk.PhotoImage(self.Apercu(" | ||
- | Maintenant nous entrons dans les définitions globales (au milieu à droite). Vous souvenez peut-être que lorsque vous utilisez Tkinter, si vous avez un widget comme une boîte de saisie de texte ou une liste déroulante et que vous souhaitez récupérer les informations sélectionnées ou saisies, vous définissez une variable globale, puis l' | + | Maintenant nous entrons dans les définitions globales (au milieu à droite). Vous vous souvenez peut-être que lorsque vous utilisez Tkinter, si vous avez un widget comme une boîte de saisie de texte ou une liste déroulante et que vous souhaitez récupérer les informations sélectionnées ou saisies, vous définissez une variable globale, puis l' |
====== 6 ====== | ====== 6 ====== | ||
Ligne 95: | Ligne 95: | ||
The ComboStitch variable is set by a combobox, and handles the stitch size of the aida that you wish to use for your project. The ComboSize variable is also set by a combo box and holds the size of the aida fabric. FabricHeight and FabricWidth are the breakdowns from the aida size. MaxColors is a value from an entry box to set the number of colors, and BorderSize is a floating point value that specifies the amount of unused aida for framing.** | The ComboStitch variable is set by a combobox, and handles the stitch size of the aida that you wish to use for your project. The ComboSize variable is also set by a combo box and holds the size of the aida fabric. FabricHeight and FabricWidth are the breakdowns from the aida size. MaxColors is a value from an entry box to set the number of colors, and BorderSize is a floating point value that specifies the amount of unused aida for framing.** | ||
- | Comme vous pouvez le voir, nous créons des variables NomFichierOriginal, | + | Comme vous pouvez le voir, nous créons des variables |
- | La variable ComboTaillePoints est réglée par une liste déroulante, et gère la taille des points de la toile aida que vous souhaitez utiliser pour votre projet. La variable ComboTaille est également définie par une zone de liste déroulante et contient la taille de la toile aida. LargeurTissu et HauteurTissu sont les dimensions de la toile aida. MaxCouleurs est réglée à partir d'une zone de saisie pour définir le nombre de couleurs, et TailleBordure est une valeur en virgule flottante qui indique la quantité d'aida utilisé pour le cadre. | + | La variable ComboTaillePoints est réglée par une liste déroulante et gère la taille des points de la toile aïda que vous souhaitez utiliser pour votre projet. La variable ComboTaille est également définie par une zone de liste déroulante et contient la taille de la toile aïda. LargeurTissu et HauteurTissu sont les dimensions de la toile aïda. MaxCouleurs est réglée à partir d'une zone de saisie pour définir le nombre de couleurs et TailleBordure est une valeur en virgule flottante qui indique la quantité d'aïda utilisé pour le cadre. |
====== 7 ====== | ====== 7 ====== | ||
Ligne 137: | Ligne 137: | ||
La prochaine série de variables globales (en haut à droite) est utilisée pour faciliter l' | La prochaine série de variables globales (en haut à droite) est utilisée pour faciliter l' | ||
- | Voilà, nous avons créé toutes nos variables globales, et arrivons au code qui crée réellement l' | + | Voilà, nous avons créé toutes nos variables globales et arrivons au code qui crée réellement l' |
====== 9 ====== | ====== 9 ====== | ||
Ligne 166: | Ligne 166: | ||
self.PlacerWidgets(frm) | self.PlacerWidgets(frm) | ||
- | La prochaine partie de notre code (au milieu à droite) met en place la barre de menu. J'ai essayé de rester logique pour que ça soit facile à comprendre. | + | La prochaine partie de notre code (au milieu à droite) met en place la barre de menu. J'ai essayé de rester logique pour qu' |
- | Nous définissons une fonction appelée FabriquerMenu, | + | Nous définissons une fonction appelée FabriquerMenu, |
menu.add_cascade(label=" | menu.add_cascade(label=" | ||
menu.add_cascade(label=" | menu.add_cascade(label=" | ||
Ligne 214: | Ligne 214: | ||
Nous commençons par la définition de la fonction (en bas à droite), qui prend en argument la fenêtre racine (principale) et crée un cadre qui contient tous nos autres widgets. J'ai ajouté des commentaires pour aider à comprendre quelle partie du code traite de quelle fenêtre. Nous allons commencer avec la fenêtre supérieure. | Nous commençons par la définition de la fonction (en bas à droite), qui prend en argument la fenêtre racine (principale) et crée un cadre qui contient tous nos autres widgets. J'ai ajouté des commentaires pour aider à comprendre quelle partie du code traite de quelle fenêtre. Nous allons commencer avec la fenêtre supérieure. | ||
- | En supposant que vous vous souvenez ou avez rafraîchi votre mémoire sur Tkinter, cela devrait être assez simple. Regardons la première étiquette pour l' | + | En supposant que vous vous en souvenez ou avez rafraîchi votre mémoire sur Tkinter, cela devrait être assez simple. Regardons la première étiquette pour l' |
self.label1 = Label(self.frm1, | self.label1 = Label(self.frm1, | ||
- | Premièrement, | + | Premièrement, |
| | ||
Ligne 229: | Ligne 229: | ||
One more thing to look at is the textvariable parameter. This tells us what variable will hold the information that will be displayed in the widget. We set these in the __init__ function earlier. One other thing to mention is that the frame itself has two parameters you might not remember. The Relief parameter sets the border type of the frame, which in this case is GROOVE, and the bd parameter sets the border width. Border width defaults at 0 so if you want to see the effect, you have to set the border width (bd is a shortcut).** | One more thing to look at is the textvariable parameter. This tells us what variable will hold the information that will be displayed in the widget. We set these in the __init__ function earlier. One other thing to mention is that the frame itself has two parameters you might not remember. The Relief parameter sets the border type of the frame, which in this case is GROOVE, and the bd parameter sets the border width. Border width defaults at 0 so if you want to see the effect, you have to set the border width (bd is a shortcut).** | ||
- | La première chose à remarquer est que c'est scindé en deux lignes. Vous pouvez placer le tout sur une seule ligne sans problème... mais c'est tout simplement trop long pour tenir sur une ligne de 72 caractères. Nous allons vraiment faire attention aux paramètres que nous utilisons ici. D' | + | La première chose à remarquer est que c'est scindé en deux lignes. Vous pouvez placer le tout sur une seule ligne sans problème... mais c'est tout simplement trop long pour tenir sur une ligne de 72 caractères. Nous allons vraiment faire attention aux paramètres que nous utilisons ici. D' |
- | Une autre chose à regarder est le paramètre textvariable. Il indique la variable qui contiendra l' | + | Une autre chose à regarder est le paramètre textvariable. Il indique la variable qui contiendra l' |
====== 13 ====== | ====== 13 ====== | ||
Ligne 243: | Ligne 243: | ||
Maintenant, nous allons nous occuper des widgets de la fenêtre du milieu. | Maintenant, nous allons nous occuper des widgets de la fenêtre du milieu. | ||
- | Les six dernières lignes de cette section (page précédente, | + | Les six dernières lignes de cette section (page précédente, |
Tout le reste ci-dessus est assez « classique ». Maintenant, nous réglons nos valeurs par défaut pour les widgets qui en ont besoin. Encore une fois, nous utilisons les variables globales mises en place dans la fonction __init__ et associées aux classes de variables de widgets. | Tout le reste ci-dessus est assez « classique ». Maintenant, nous réglons nos valeurs par défaut pour les widgets qui en ont besoin. Encore une fois, nous utilisons les variables globales mises en place dans la fonction __init__ et associées aux classes de variables de widgets. | ||
Ligne 287: | Ligne 287: | ||
First we place the frame.** | First we place the frame.** | ||
- | Enfin, nous traitons | + | Enfin, nous traitons la fenêtre latérale, qui contiendra une ScrolledFrame (fenêtre à ascenseurs) de la bibliothèque PMW. C'est vraiment facile à utiliser et fournit une interface agréable pour l' |
C'est tout pour les widgets. Maintenant, nous devons les placer. Comme je l'ai dit plus tôt, nous utiliserons le gestionnaire en « grille », plutôt que les gestionnaires « absolu » ou « paquet ». | C'est tout pour les widgets. Maintenant, nous devons les placer. Comme je l'ai dit plus tôt, nous utiliserons le gestionnaire en « grille », plutôt que les gestionnaires « absolu » ou « paquet ». | ||
Ligne 303: | Ligne 303: | ||
The bottom frame is simple since we have only the frame and the two labels to hold the images.** | The bottom frame is simple since we have only the frame and the two labels to hold the images.** | ||
+ | |||
+ | Vous pouvez voir que nous plaçons le widget en utilisant la commande {nomwidget}.grid, | ||
+ | |||
+ | La fenêtre du milieu est un peu plus compliquée, | ||
+ | |||
+ | La fenêtre du bas est simple puisque nous n' | ||
====== 17 ====== | ====== 17 ====== | ||
Ligne 314: | Ligne 320: | ||
def DoExit(self): | def DoExit(self): | ||
sys.exit()** | sys.exit()** | ||
+ | |||
+ | La fenêtre de côté est à peu près identique, sauf que la ScrolledFrame permet qu'un cadre soit défini à l' | ||
+ | |||
+ | Le travail difficile est fini pour le moment. Maintenant nous allons créer toutes les fonctions dont nous aurons besoin pour obtenir une interface graphique qui fonctionne ; la plupart seront vides jusqu' | ||
+ | |||
+ | La première fonction sera l' | ||
+ | |||
+ | def Quitter(self): | ||
+ | sys.exit() | ||
====== 18 ====== | ====== 18 ====== | ||
Ligne 325: | Ligne 340: | ||
For the rest of the functions, I’ll just give you the def lines. Be sure to include them all in your code.** | For the rest of the functions, I’ll just give you the def lines. Be sure to include them all in your code.** | ||
+ | |||
+ | La seule autre est la fonction Apercu. Nous en avons besoin pour remplir les rectangles gris dans les étiquettes de la fenêtre du bas. Nous lui passons le nom du fichier et la largeur et la hauteur que nous souhaitons pour l' | ||
+ | |||
+ | Comme cet article est déjà long, je vais vous donner une liste de noms de fonctions et tout ce que vous avez à faire est de les remplir en utilisant la commande pass. Nous les compléterons le mois prochain. Je vais vous donner le premier comme un exemple, mais vous devriez déjà savoir comment le faire. | ||
+ | |||
+ | def RecupererNomFichier(self): | ||
+ | pass | ||
+ | |||
+ | Pour le reste des fonctions, je vais vous donner les lignes def. Assurez-vous de tous les inclure dans votre code. | ||
====== 19 ====== | ====== 19 ====== | ||
Ligne 339: | Ligne 363: | ||
The first line sets up the root TopLevel window. The next line sets the title on the top line. The third line instantiates our XStitch class, and the last line starts the main loop that shows the UI and gives control over to it.** | The first line sets up the root TopLevel window. The next line sets the title on the top line. The third line instantiates our XStitch class, and the last line starts the main loop that shows the UI and gives control over to it.** | ||
+ | |||
+ | Comme vous pouvez le voir, nous avons pas mal de travail à faire le mois prochain. Nous avons encore quatre lignes à écrire pour finir pour ce mois, en dehors de notre code de classe : | ||
+ | |||
+ | racine = Tk() | ||
+ | |||
+ | racine.title(" | ||
+ | |||
+ | test = XStitch(racine) | ||
+ | |||
+ | racine.mainloop() | ||
+ | |||
+ | La première ligne met en place la fenêtre racine. La ligne suivante définit le titre sur la ligne supérieure. La troisième ligne instancie notre classe XStitch, et la dernière ligne démarre la boucle principale qui montre l' | ||
====== 20 ====== | ====== 20 ====== | ||
Ligne 348: | Ligne 384: | ||
Next month we will flesh out the code. See you then.** | Next month we will flesh out the code. See you then.** | ||
+ | Eh bien, ça fait beaucoup pour ce mois-ci, mais nous sommes arrivés au bout. Vous pouvez effectivement exécuter le programme pour voir l' | ||
+ | Comme toujours, le code est disponible sur Pastebin : http:// | ||
- | + | Rendez-vous le mois prochain pour étoffer le code. | |
- | VF : http:// | + | |
====== MORCEAUX DE CODE PAGE 11 ====== | ====== MORCEAUX DE CODE PAGE 11 ====== |
issue86/python.1419972929.txt.gz · Dernière modification : 2014/12/30 21:55 de fredphil91