« Python : Tkinter » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
(12 versions intermédiaires par la même utilisatrice non affichées)
Ligne 1 : Ligne 1 :
[[Category:prog]]
[[Category:python]]
= Python : Tkinter =


= Python : Tkinter =
&nbsp; cf&nbsp;: [http://apprendre-python.com/page-tkinter-interface-graphique-python-tutoriel http://apprendre-python.com/page-tkinter-interface-graphique-python-tutoriel]<br/> &nbsp;


&nbsp;
&nbsp;


Ce qui va suivre est entièrement issu de [http://apprendre-python.com/page-tkinter-interface-graphique-python-tutoriel http://apprendre-python.com/page-tkinter-interface-graphique-python-tutoriel]
== Script 1 : Une mise en oeuvre brouillonne ==
 
Je ne l'ai mis ici que pour référence rapide
 
&nbsp;Python 2, python 3
 
Les modules ne sont pas les mêmes suivant votre version de python. Si le message suivant apparaît lors de l'exécution de votre script:
 
ImportError: No module named 'Tkinter'
 
C'est que le module appelé n'est pas le bon par rapport à votre version python.
 
Python 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Python 3<br/> Tkinter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; →&nbsp; tkinter<br/> Tix&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; →&nbsp; tkinter.tix<br/> ttk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; →&nbsp; tkinter.ttk<br/> tkMessageBox&nbsp;&nbsp;&nbsp; →&nbsp; tkinter.messagebox<br/> tkColorChooser&nbsp; →&nbsp; tkinter.colorchooser<br/> tkFileDialog&nbsp;&nbsp;&nbsp; →&nbsp; tkinter.filedialog<br/> tkCommonDialog&nbsp; →&nbsp; tkinter.commondialog<br/> tkSimpleDialog&nbsp; →&nbsp; tkinter.simpledialog<br/> tkFont&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; →&nbsp; tkinter.font<br/> Tkdnd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; →&nbsp; tkinter.dnd<br/> ScrolledText&nbsp;&nbsp;&nbsp; →&nbsp; tkinter.scrolledtext
 
Hello world


Voici le code de votre premier hello world
Un script qui met en oeuvre la plupart des commandes vues dans le tuto. Le résultat est très bizarre, mais l'important c'est que ça fonctionne&nbsp;:D
<div style="background:#eeeeee;  border:1px solid #cccccc;  padding:5px 10px">
<span style="color:#cc7832">from </span>tkinter <span style="color:#cc7832">import </span>*<br/> <span style="color:#cc7832">from </span>tkinter.messagebox <span style="color:#cc7832">import </span>*<br/> <span style="color:#cc7832">from </span>tkinter.filedialog <span style="color:#cc7832">import </span>*


# -*- coding: utf-8 -*-<br/> &nbsp;<br/> from tkinter import *
<span style="color:#808080"># -*- coding: latin-9 -*-</span>


fenetre = Tk()
fenetre = Tk()


label = Label(fenetre, text="Hello World")<br/> label.pack()
fenetre[<span style="color:#6a8759">'bg'</span>]=<span style="color:#6a8759">'white'</span><br/> <br/> <span style="color:#808080"># frames</span><br/> <br/> Frame1 = Frame(fenetre<span style="color:#cc7832">, </span><span style="color:#aa4926">borderwidth </span>= <span style="color:#6897bb">2</span><span style="color:#cc7832">, </span><span style="color:#aa4926">relief </span>= GROOVE)<br/> Frame1.pack(<span style="color:#aa4926">side</span>=LEFT<span style="color:#cc7832">, </span><span style="color:#aa4926">padx</span>=<span style="color:#6897bb">10</span><span style="color:#cc7832">, </span><span style="color:#aa4926">pady</span>=<span style="color:#6897bb">30</span>)


fenetre.mainloop()
Frame2 = Frame(fenetre<span style="color:#cc7832">, </span><span style="color:#aa4926">borderwidth </span>= <span style="color:#6897bb">2</span><span style="color:#cc7832">, </span><span style="color:#aa4926">relief </span>= GROOVE)<br/> Frame2.pack(<span style="color:#aa4926">side</span>=RIGHT<span style="color:#cc7832">, </span><span style="color:#aa4926">padx</span>=<span style="color:#6897bb">10</span><span style="color:#cc7832">, </span><span style="color:#aa4926">pady</span>=<span style="color:#6897bb">30</span>)


Une fenêtre comme celle-ci devrait apparaître:
Frame3 = Frame(fenetre<span style="color:#cc7832">, </span><span style="color:#aa4926">borderwidth </span>= <span style="color:#6897bb">2</span><span style="color:#cc7832">, </span><span style="color:#aa4926">relief </span>= GROOVE)<br/> Frame3.pack(<span style="color:#aa4926">side </span>= BOTTOM<span style="color:#cc7832">, </span><span style="color:#aa4926">padx</span>=<span style="color:#6897bb">10</span><span style="color:#cc7832">, </span><span style="color:#aa4926">pady </span>= <span style="color:#6897bb">30</span>)


Les widget Tkinter
<span style="color:#808080">#ajout d'un bouton</span><br/> <br/> bouton = Checkbutton(Frame1<span style="color:#cc7832">, </span><span style="color:#aa4926">text</span>=<span style="color:#6a8759">"Cocher si vous êtes heureux."</span>)<br/> bouton.pack()


Pour créer un logiciel graphique vous devez ajouter dans une fenêtre des éléments graphiques que l'on nomme widget. Ce widget peut être tout aussi bien une liste déroulante que du texte.<br/> Les boutons
<span style="color:#808080">#Ajout d'une liste</span><br/> <br/> liste=Listbox(Frame2)<br/> liste.insert(<span style="color:#6897bb">1</span><span style="color:#cc7832">, </span><span style="color:#6a8759">"Bière"</span>)<br/> liste.insert(<span style="color:#6897bb">2</span><span style="color:#cc7832">, </span><span style="color:#6a8759">"Jus d'orange"</span>)<br/> liste.insert(<span style="color:#6897bb">3</span><span style="color:#cc7832">, </span><span style="color:#6a8759">"Lait"</span>)<br/> liste.pack()


Les boutons permettent de proposer une action à l'utilisateur. Dans l'exemple ci-dessous, on lui propose de fermer la fenêtre.
<span style="color:#808080">#Ajout d'un canevas</span><br/> <br/> canevas = Canvas(Frame3<span style="color:#cc7832">, </span><span style="color:#aa4926">width </span>= <span style="color:#6897bb">150</span><span style="color:#cc7832">, </span><span style="color:#aa4926">height </span>= <span style="color:#6897bb">120</span><span style="color:#cc7832">, </span><span style="color:#aa4926">background</span>=<span style="color:#6a8759">"pink"</span>)<br/> cercle = canevas.create_oval(<span style="color:#6897bb">50</span><span style="color:#cc7832">, </span><span style="color:#6897bb">100</span><span style="color:#cc7832">, </span><span style="color:#6897bb">150</span><span style="color:#cc7832">, </span><span style="color:#6897bb">50</span>)<br/> canevas.pack(<span style="color:#aa4926">side</span>=LEFT)


# bouton de sortie<br/> bouton=Button(fenetre, text="Fermer", command=fenetre.quit)<br/> bouton.pack()
<span style="color:#808080">#Ajout de labelframe</span><br/> <br/> Labelframe = LabelFrame(fenetre<span style="color:#cc7832">, </span><span style="color:#aa4926">text</span>=<span style="color:#6a8759">"Quel est ton pourcentage de bonheur?"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">padx</span>=<span style="color:#6897bb">20</span><span style="color:#cc7832">, </span><span style="color:#aa4926">pady</span>=<span style="color:#6897bb">20</span>)<br/> Labelframe.pack(<span style="color:#aa4926">fill</span>=<span style="color:#6a8759">"both"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">expand</span>=<span style="color:#6a8759">"yes"</span>)


Les labels
<span style="color:#808080">#Ajout d'une spinbox</span><br/> s = Spinbox(Labelframe<span style="color:#cc7832">, </span><span style="color:#aa4926">text</span>=<span style="color:#6a8759">"A combien tu est mon amie?"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">from_</span>=<span style="color:#6897bb">0</span><span style="color:#cc7832">, </span><span style="color:#aa4926">to_</span>=<span style="color:#6897bb">100</span>)<br/> s.pack()


Les labels sont des espaces prévus pour écrire du texte. Les labels servent souvent à décrire un widget comme un input
<span style="color:#808080">#Ajout d'une alerte sur un bouton</span><br/> <br/> <span style="color:#cc7832">def </span><span style="color:#ffc66d">bouh</span>():<br/> &nbsp;&nbsp;&nbsp; <span style="color:#cc7832">if </span>askyesno(<span style="color:#6a8759">"Attention"</span><span style="color:#cc7832">, </span><span style="color:#6a8759">"Cliquez ici"</span>):<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showwarning(<span style="color:#6a8759">"BOUH!"</span>)


# label<br/> label = Label(fenetre, text="Texte par défaut", bg="yellow")<br/> label.pack()
&nbsp;&nbsp;&nbsp; <span style="color:#cc7832">else</span>:<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showinfo(<span style="color:#6a8759">"Allez..."</span><span style="color:#cc7832">, </span><span style="color:#6a8759">"Allez, clique!"</span>)


Entrée / input
bouton2 = Button(fenetre<span style="color:#cc7832">, </span><span style="color:#aa4926">text</span>=<span style="color:#6a8759">"Clique Ici"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">command</span>=bouh)<br/> bouton2.pack()


# entrée<br/> value = StringVar()<br/> value.set("texte par défaut")<br/> entree = Entry(fenetre, textvariable=string, width=30)<br/> entree.pack()
<span style="color:#808080">#Ajout d'une barre de menu</span><br/> <br/> <span style="color:#cc7832">def </span><span style="color:#ffc66d">alert</span>():<br/> &nbsp;&nbsp;&nbsp; showinfo(<span style="color:#6a8759">"OUAF"</span><span style="color:#cc7832">, </span><span style="color:#6a8759">"OUAF"</span>)


Case à cocher
<span style="color:#cc7832">def </span><span style="color:#ffc66d">miaou</span>():<br/> &nbsp;&nbsp;&nbsp; showinfo(<span style="color:#6a8759">"MIAOU"</span><span style="color:#cc7832">, </span><span style="color:#6a8759">"MIAOU"</span>)


Les checkbox proposent à l'utilisateur de cocher une option.
<span style="color:#cc7832">def </span><span style="color:#ffc66d">ouvreImage</span>():<br/> &nbsp;&nbsp;&nbsp; <span style="color:#808080"># récupération et affichage d'image</span><br/> <br/> <span style="color:#808080">&nbsp;&nbsp;&nbsp; </span>filepath = askopenfilename(<span style="color:#aa4926">title</span>=<span style="color:#6a8759">"Ouvrir une image PNG"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">filetypes</span>=[(<span style="color:#6a8759">'png files'</span><span style="color:#cc7832">, </span><span style="color:#6a8759">'.png'</span>)<span style="color:#cc7832">, </span>(<span style="color:#6a8759">'all files'</span><span style="color:#cc7832">, </span><span style="color:#6a8759">'.*'</span>)])<br/> &nbsp;&nbsp;&nbsp; photo2 = PhotoImage(<span style="color:#aa4926">file</span>=filepath)<br/> &nbsp;&nbsp;&nbsp; canvas3 = Canvas(fenetre<span style="color:#cc7832">, </span><span style="color:#aa4926">width</span>=photo2.width()<span style="color:#cc7832">, </span><span style="color:#aa4926">height</span>=photo2.height())<br/> &nbsp;&nbsp;&nbsp; canvas3.create_image(<span style="color:#6897bb">0</span><span style="color:#cc7832">, </span><span style="color:#6897bb">0</span><span style="color:#cc7832">, </span><span style="color:#aa4926">anchor</span>=NW<span style="color:#cc7832">, </span><span style="color:#aa4926">image</span>=photo2)<br/> &nbsp;&nbsp;&nbsp; canvas3.pack()


# checkbutton<br/> bouton = Checkbutton(fenetre, text="Nouveau?")<br/> bouton.pack()
<span style="color:#cc7832">def </span><span style="color:#ffc66d">ouvreTexte</span>():<br/> &nbsp;&nbsp;&nbsp; <span style="color:#808080"># Récupération et affichage de txt</span><br/> <span style="color:#808080">&nbsp;&nbsp;&nbsp; </span>filename = askopenfilename(<span style="color:#aa4926">title</span>=<span style="color:#6a8759">"Ouvrir votre document"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">filetypes</span>=[(<span style="color:#6a8759">'txt files'</span><span style="color:#cc7832">, </span><span style="color:#6a8759">'.txt'</span>)<span style="color:#cc7832">, </span>(<span style="color:#6a8759">'all files'</span><span style="color:#cc7832">, </span><span style="color:#6a8759">'.*'</span>)])<br/> &nbsp;&nbsp;&nbsp; fichier = <span style="color:#8888c6">open</span>(filename<span style="color:#cc7832">, </span><span style="color:#6a8759">"r"</span>)<br/> &nbsp;&nbsp;&nbsp; content = fichier.read()<br/> &nbsp;&nbsp;&nbsp; fichier.close()


Boutons radio
&nbsp;&nbsp;&nbsp; Label(fenetre<span style="color:#cc7832">, </span><span style="color:#aa4926">text</span>=content).pack(<span style="color:#aa4926">padx</span>=<span style="color:#6897bb">10</span><span style="color:#cc7832">, </span><span style="color:#aa4926">pady</span>=<span style="color:#6897bb">10</span>)


Les boutons radio sont des cases à cocher qui sont dans un groupe et dans ce groupe seul un élément peut être sélectionné.
menubar = Menu(fenetre)


# radiobutton<br/> value = StringVar()<br/> bouton1 = Radiobutton(fenetre, text="Oui", variable=value, value=1)<br/> bouton2 = Radiobutton(fenetre, text="Non", variable=value, value=2)<br/> bouton3 = Radiobutton(fenetre, text="Peu être", variable=value, value=3)<br/> bouton1.pack()<br/> bouton2.pack()<br/> bouton3.pack()
menu1 = Menu(menubar<span style="color:#cc7832">, </span><span style="color:#aa4926">tearoff</span>=<span style="color:#6897bb">0</span>)<br/> menu1.add_command(<span style="color:#aa4926">label</span>=<span style="color:#6a8759">"Chien"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">command</span>=alert)<br/> menu1.add_separator()<br/> menu1.add_command(<span style="color:#aa4926">label</span>=<span style="color:#6a8759">"Quitter"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">command</span>=fenetre.quit)<br/> menubar.add_cascade(<span style="color:#aa4926">label</span>=<span style="color:#6a8759">"Canidé"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">menu</span>=menu1)


Les listes
menu2 = Menu(menubar<span style="color:#cc7832">, </span><span style="color:#aa4926">tearoff</span>=<span style="color:#6897bb">0</span>)<br/> menu2.add_command(<span style="color:#aa4926">label</span>=<span style="color:#6a8759">"Chat"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">command</span>=miaou)<br/> menubar.add_cascade(<span style="color:#aa4926">label</span>=<span style="color:#6a8759">"Félidés"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">menu</span>=menu2)


Les listes permettent de récupérer une valeur sélectionnée par l'utilisateur.
menu3 = Menu(menubar<span style="color:#cc7832">, </span><span style="color:#aa4926">tearoff</span>=<span style="color:#6897bb">0</span>)<br/> menu3.add_command(<span style="color:#aa4926">label</span>=<span style="color:#6a8759">"Ouvrir un txt"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">command </span>= ouvreTexte)<br/> menubar.add_cascade(<span style="color:#aa4926">label</span>=<span style="color:#6a8759">"Ouvrir des fichiers"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">menu</span>=menu3)


# liste<br/> liste = Listbox(fenetre)<br/> liste.insert(1, "Python")<br/> liste.insert(2, "PHP")<br/> liste.insert(3, "jQuery")<br/> liste.insert(4, "CSS")<br/> liste.insert(5, "Javascript")
fenetre.config(<span style="color:#aa4926">menu</span>=menubar)


liste.pack()
<span style="color:#808080">#Ajout d'un bouton qui change le curseur</span><br/> <br/> Button(fenetre<span style="color:#cc7832">, </span><span style="color:#aa4926">text</span>=<span style="color:#6a8759">"croix"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">relief</span>=RAISED<span style="color:#cc7832">, </span><span style="color:#aa4926">cursor</span>=<span style="color:#6a8759">"pirate"</span>).pack(<span style="color:#aa4926">side</span>=LEFT)


Canvas
<span style="color:#808080">#Ajout d'une image</span><br/> photo = PhotoImage(<span style="color:#aa4926">file</span>=<span style="color:#6a8759">"squirrel.png"</span>)


Un canvas (toile, tableau en français) est un espace dans lequel vous pouvez dessiner ou écrire ce que vous voulez:
canvas = Canvas(fenetre<span style="color:#cc7832">, </span><span style="color:#aa4926">width </span>= <span style="color:#6897bb">350</span><span style="color:#cc7832">, </span><span style="color:#aa4926">height </span>= <span style="color:#6897bb">400</span>)<br/> canvas.create_image(<span style="color:#6897bb">0</span><span style="color:#cc7832">, </span><span style="color:#6897bb">0</span><span style="color:#cc7832">, </span><span style="color:#aa4926">anchor</span>=NW<span style="color:#cc7832">, </span><span style="color:#aa4926">image</span>=photo)<br/> canvas.pack()


# canvas<br/> canvas = Canvas(fenetre, width=150, height=120, background='yellow')<br/> ligne1 = canvas.create_line(75, 0, 75, 120)<br/> ligne2 = canvas.create_line(0, 60, 150, 60)<br/> txt = canvas.create_text(75, 60, text="Cible", font="Arial 16 italic", fill="blue")<br/> canvas.pack()
<span style="color:#808080">#Récupération d'input</span><br/> <span style="color:#cc7832">def </span><span style="color:#ffc66d">recup</span>():<br/> &nbsp;&nbsp;&nbsp; showinfo(<span style="color:#6a8759">"Alerte"</span><span style="color:#cc7832">, </span>entree.get())


Vous pouvez créer d'autres éléments:
value = StringVar()<br/> value.set(<span style="color:#6a8759">"Valeur"</span>)<br/> entree = Entry(fenetre<span style="color:#cc7832">, </span><span style="color:#aa4926">textvariable</span>=value<span style="color:#cc7832">, </span><span style="color:#aa4926">width</span>=<span style="color:#6897bb">30</span>)


create_arc()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; arc de cercle<br/> create_bitmap()&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; bitmap<br/> create_image()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; image<br/> create_line()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; ligne<br/> create_oval()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; ovale<br/> create_polygon()&nbsp;&nbsp;&nbsp; :&nbsp; polygone<br/> create_rectangle()&nbsp; :&nbsp; rectangle<br/> create_text()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; texte<br/> create_window()&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; fenetre
bouton3 = Button(fenetre<span style="color:#cc7832">, </span><span style="color:#aa4926">text</span>=<span style="color:#6a8759">"Valider"</span><span style="color:#cc7832">, </span><span style="color:#aa4926">command</span>=recup)<br/> bouton3.pack()


Si vous voulez changer les coordonnées d'un élement crée dans le canevas, vous pouvez utiliser la méthode coords .
fenetre.mainloop()
</div>
Le fichier squirrel.png qui va avec:


canvas.coords(élément, x0, y0, x1, y1)
[[Media:Squirrel.png|Media:Squirrel.png]]


Pour supprimer un élément vous pouvez utiliser la méthode delete
&nbsp;
 
canvas.delete(élément)
 
Vous pouvez trouver d'autres méthodes utiles en exécutant l'instruction suivante:
 
print dir(Canvas())
 
ou visitez la page suivante infohost<br/> Scale
 
Le widget scale permet de récupérer une valeur numérique via un scroll
 
value = DoubleVar()<br/> scale = Scale(fenetre, variable=value)<br/> scale.pack()
 
Frames
 
Les frames (cadres) sont des conteneurs qui permettent de séparer des éléments.
 
fenetre['bg']='white'
 
# frame 1<br/> Frame1 = Frame(fenetre, borderwidth=2, relief=GROOVE)<br/> Frame1.pack(side=LEFT, padx=30, pady=30)
 
# frame 2<br/> Frame2 = Frame(fenetre, borderwidth=2, relief=GROOVE)<br/> Frame2.pack(side=LEFT, padx=10, pady=10)
 
# frame 3 dans frame 2<br/> Frame3 = Frame(Frame2, bg="white", borderwidth=2, relief=GROOVE)<br/> Frame3.pack(side=RIGHT, padx=5, pady=5)
 
# Ajout de labels<br/> Label(Frame1, text="Frame 1").pack(padx=10, pady=10)<br/> Label(Frame2, text="Frame 2").pack(padx=10, pady=10)<br/> Label(Frame3, text="Frame 3",bg="white").pack(padx=10, pady=10)
 
PanedWindow
 
Le panedwindow est un conteneur qui peut contenir autant de panneaux que nécessaire disposé horizontalement ou verticalement.
 
p = PanedWindow(fenetre, orient=HORIZONTAL)<br/> p.pack(side=TOP, expand=Y, fill=BOTH, pady=2, padx=2)<br/> p.add(Label(p, text='Volet 1', background='blue', anchor=CENTER))<br/> p.add(Label(p, text='Volet 2', background='white', anchor=CENTER) )<br/> p.add(Label(p, text='Volet 3', background='red', anchor=CENTER) )<br/> p.pack()
 
[Version horizontale] [Version verticale]<br/> Spinbox
 
La spinbox propose à l'utilisateur de choisir un nombre
 
s = Spinbox(fenetre, from_=0, to=10)<br/> s.pack()
 
[Version verticale]<br/> LabelFrame
 
Le labelframe est un cadre avec un label.


l = LabelFrame(fenetre, text="Titre de la frame", padx=20, pady=20)<br/> l.pack(fill="both", expand="yes")<br/> &nbsp;<br/> Label(l, text="A l'intérieure de la frame").pack()


[Version verticale]<br/> Les alertes


Pour pouvoir utiliser les alertes de votre os, vous pouvez importer le module tkMessageBox (Python 2).
== Script 2&nbsp;: Un éditeur de texte ==


from tkMessageBox import *
Un éditeur de texte tout simple, basé sur le widget Text de tkInter.
 
Pour python 3:


La fonction recup est laissée pour expliquer le fonctionnement.
<div style="background:#eeeeee;  border:1px solid #cccccc;  padding:5px 10px"><pre>from tkinter import *
from tkinter.messagebox import *
from tkinter.messagebox import *
from tkinter.filedialog import *


Exemple d'utilisation:
# -*- coding: latin-9 -*-
 
def callback():<br/> &nbsp;&nbsp;&nbsp; if askyesno('Titre 1', 'Êtes-vous sûr de vouloir faire ça?'):<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showwarning('Titre 2', 'Tant pis...')<br/> &nbsp;&nbsp;&nbsp; else:<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showinfo('Titre 3', 'Vous avez peur!')<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showerror("Titre 4", "Aha")
 
Button(text='Action', command=callback).pack()
 
[Version verticale]
 
Voici les alertes possibles:
 
showinfo()<br/> showwarning()<br/> showerror()<br/> askquestion()<br/> askokcancel()<br/> askyesno()<br/> askretrycancel()
 
Barre de menu
 
Il est possible de créer une barre de menu comme-ceci:
 
def alert():<br/> &nbsp;&nbsp;&nbsp; showinfo("alerte", "Bravo!")
 
menubar = Menu(fenetre)
 
menu1 = Menu(menubar, tearoff=0)<br/> menu1.add_command(label="Créer", command=alert)<br/> menu1.add_command(label="Editer", command=alert)<br/> menu1.add_separator()<br/> menu1.add_command(label="Quitter", command=fenetre.quit)<br/> menubar.add_cascade(label="Fichier", menu=menu1)
 
menu2 = Menu(menubar, tearoff=0)<br/> menu2.add_command(label="Couper", command=alert)<br/> menu2.add_command(label="Copier", command=alert)<br/> menu2.add_command(label="Coller", command=alert)<br/> menubar.add_cascade(label="Editer", menu=menu2)
 
menu3 = Menu(menubar, tearoff=0)<br/> menu3.add_command(label="A propos", command=alert)<br/> menubar.add_cascade(label="Aide", menu=menu3)
 
fenetre.config(menu=menubar)
 
[Version verticale]<br/> Connaitre toutes les méthodes / options d'un widget
 
Pour cela il vous suffit d'exécuter la ligne suivante:
 
print dir(Button())
 
Les attributs standards
 
Il est possible de changer la valeur d'attributs présents sur les widgets<br/> Placer des widgets
 
Il est possible de placer les widgets à l'aide du paramètre side :
 
side=TOP&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; haut<br/> side=LEFT&nbsp;&nbsp;&nbsp; :&nbsp; gauche<br/> side=BOTTOM&nbsp; :&nbsp; bas<br/> side=RIGHT&nbsp;&nbsp; :&nbsp; droite
 
Exemple:
 
Canvas(fenetre, width=250, height=100, bg='ivory').pack(side=TOP, padx=5, pady=5)<br/> Button(fenetre, text ='Bouton 1').pack(side=LEFT, padx=5, pady=5)<br/> Button(fenetre, text ='Bouton 2').pack(side=RIGHT, padx=5, pady=5)
 
[Version verticale]
 
Autre exemple:
 
Canvas(fenetre, width=250, height=50, bg='ivory').pack(side=LEFT, padx=5, pady=5)<br/> Button(fenetre, text ='Bouton 1').pack(side=TOP, padx=5, pady=5)<br/> Button(fenetre, text ='Bouton 2').pack(side=BOTTOM, padx=5, pady=5)
 
[Version verticale]<br/> Les unités de dimensions
 
Si vous indiquez une dimension à travers un integer, l'unité utilisée sera les "pixels". Il est cependant possible de changer l'unité:
 
i : pouces<br/> m : millimètre<br/> c : centimètre
 
Les options de dimensions
 
height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Hauteur du widget.<br/> width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Largeur du widget.<br/> padx, pady&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Espace supplémentaire autour du widget. X pour horizontal et V pour vertical.<br/> borderwidth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Taille de la bordure.<br/> highlightthickness : Largeur du rectangle lorsque le widget a le focus.<br/> selectborderwidth&nbsp; : Largeur de la bordure tridimensionnel autour du widget sélectionné.<br/> wraplength&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Nombre de ligne maximum pour les widget en mode "word wrapping".
 
Les options de couleurs
 
Il est possible d'indiquer une valeur de couleur par son nom en anglais: "white", "black", "red", "yellow", etc. ou par son code hexadécimale: #000000, #00FFFF, etc.
 
background (ou bg)&nbsp;&nbsp; : couleur de fond du widget.<br/> foreground (ou fg)&nbsp;&nbsp; : couleur de premier plan du widget.<br/> activebackground&nbsp;&nbsp;&nbsp;&nbsp; : couleur de fond du widget lorsque celui-ci est actif.<br/> activeForeground&nbsp;&nbsp;&nbsp;&nbsp; : couleur de premier plan du widget lorsque le widget est actif.<br/> disabledForeground&nbsp;&nbsp; : couleur de premier plan du widget lorsque le widget est désactivé.<br/> highlightbackground&nbsp; : Couleur de fond de la région de surbrillance lorsque le widget a le focus.<br/> highlightcolor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : couleur de premier plan de la région en surbrillance lorsque le widget a le focus.<br/> selectbackground&nbsp;&nbsp;&nbsp;&nbsp; : Couleur de fond pour les éléments sélectionnés.<br/> selectforeground&nbsp;&nbsp;&nbsp;&nbsp; : couleur de premier plan pour les éléments sélectionnés.
 
Le curseur
 
Vous pouvez changer l'apparance de votre curseur:
 
Button(fenetre, text ="arrow", relief=RAISED, cursor="arrow").pack()<br/> Button(fenetre, text ="circle", relief=RAISED, cursor="circle").pack()<br/> Button(fenetre, text ="clock", relief=RAISED, cursor="clock").pack()<br/> Button(fenetre, text ="cross", relief=RAISED, cursor="cross").pack()<br/> Button(fenetre, text ="dotbox", relief=RAISED, cursor="dotbox").pack()<br/> Button(fenetre, text ="exchange", relief=RAISED, cursor="exchange").pack()<br/> Button(fenetre, text ="fleur", relief=RAISED, cursor="fleur").pack()<br/> Button(fenetre, text ="heart", relief=RAISED, cursor="heart").pack()<br/> Button(fenetre, text ="man", relief=RAISED, cursor="man").pack()<br/> Button(fenetre, text ="mouse", relief=RAISED, cursor="mouse").pack()<br/> Button(fenetre, text ="pirate", relief=RAISED, cursor="pirate").pack()<br/> Button(fenetre, text ="plus", relief=RAISED, cursor="plus").pack()<br/> Button(fenetre, text ="shuttle", relief=RAISED, cursor="shuttle").pack()<br/> Button(fenetre, text ="sizing", relief=RAISED, cursor="sizing").pack()<br/> Button(fenetre, text ="spider", relief=RAISED, cursor="spider").pack()<br/> Button(fenetre, text ="spraycan", relief=RAISED, cursor="spraycan").pack()<br/> Button(fenetre, text ="star", relief=RAISED, cursor="star").pack()<br/> Button(fenetre, text ="target", relief=RAISED, cursor="target").pack()<br/> Button(fenetre, text ="tcross", relief=RAISED, cursor="tcross").pack()<br/> Button(fenetre, text ="trek", relief=RAISED, cursor="trek").pack()<br/> Button(fenetre, text ="watch", relief=RAISED, cursor="watch").pack()
 
Le relief
 
Vous pouvez changer le relief sur vos éléments:
 
FLAT<br/> RAISED<br/> SUNKEN<br/> GROOVE<br/> RIDGE
 
b1 = Button(fenetre, text ="FLAT", relief=FLAT).pack()<br/> b2 = Button(fenetre, text ="RAISED", relief=RAISED).pack()<br/> b3 = Button(fenetre, text ="SUNKEN", relief=SUNKEN).pack()<br/> b4 = Button(fenetre, text ="GROOVE", relief=GROOVE).pack()<br/> b5 = Button(fenetre, text ="RIDGE", relief=RIDGE).pack()
 
[Version verticale]<br/> La grille
 
Il est possible de placer les éléments en raisonnant en grille:
 
for ligne in range(5):<br/> &nbsp;&nbsp;&nbsp; for colonne in range(5):<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Button(fenetre, text='L%s-C%s' % (ligne, colonne), borderwidth=1).grid(row=ligne, column=colonne)
 
[Version verticale]
 
Button(fenetre, text='L1-C1', borderwidth=1).grid(row=1, column=1)<br/> Button(fenetre, text='L1-C2', borderwidth=1).grid(row=1, column=2)<br/> Button(fenetre, text='L2-C3', borderwidth=1).grid(row=2, column=3)<br/> Button(fenetre, text='L2-C4', borderwidth=1).grid(row=2, column=4)<br/> Button(fenetre, text='L3-C3', borderwidth=1).grid(row=3, column=3)
 
[Version verticale]<br/> Intégrer une image
 
Pour intégrer une image vous pouvez créer un canevas et l'ajouter à l'intérieur comme ceci:
 
photo = PhotoImage(file="ma_photo.png")
 
canvas = Canvas(fenetre,width=350, height=200)<br/> canvas.create_image(0, 0, anchor=NW, image=photo)<br/> canvas.pack()
 
[Version verticale]<br/> Récupérer la valeur d'un input
 
Pour récupérer la valeur d'un input il vous faudra utiliser la méthode get() :
 
def recupere():<br/> &nbsp;&nbsp;&nbsp; showinfo("Alerte", entree.get())
 
value = StringVar()<br/> value.set("Valeur")<br/> entree = Entry(fenetre, textvariable=value, width=30)<br/> entree.pack()
 
bouton = Button(fenetre, text="Valider", command=recupere)<br/> bouton.pack()
 
Récupérer une image et l'afficher
 
Pour cela, vous devez importer le module suivant:
 
from tkinter.filedialog import *


filepath = askopenfilename(title="Ouvrir une image",filetypes=[('png files','.png'),('all files','.*')])<br/> photo = PhotoImage(file=filepath)<br/> canvas = Canvas(fenetre, width=photo.width(), height=photo.height(), bg="yellow")<br/> canvas.create_image(0, 0, anchor=NW, image=photo)<br/> canvas.pack()
#ELEMENTS GRAPHIQUES


[Version verticale]
window = Tk()


La fonction askopenfilename retourne le chemin du fichier que vous avez choisi avec le nom de celui-ci.
frame1 = Frame(window, borderwidth = 10, relief = GROOVE)
frame1.pack(side=LEFT, padx=10, pady=10)


Exemple: /home/olivier/ma_photo.png<br/> Récupérer un fichier texte et l'afficher
#On ajoute un widget Text, qui est une fenêtre d'édition de texte
entree = Text(frame1, height=30, width=120, bg="#3f4754", fg="white")
entree.pack()


filename = askopenfilename(title="Ouvrir votre document",filetypes=[('txt files','.txt'),('all files','.*')])<br/> fichier = open(filename, "r")<br/> content = fichier.read()<br/> fichier.close()
###FONCTIONS


Label(fenetre, text=content).pack(padx=10, pady=10)
###On fait une entrée et on récupère le texte
###Cette fonction génère une alerte, qui affiche le contenu de l'entree avec entree.get()
#La fonction get d'une entree sert à récupérer le texte qu'elle contient
#L'indice après le .get correspond à ligne.colonne&nbsp;: On prend tout de ligne0 colonne 0 à ligne50 colonne 50


Les évènements
def recup():
    showinfo("Alerte", entree.get(0.0, 50.50))


Vous pouvez récupérer les actions utilisateurs à travers les events (évènement en français).
#Fonction qui récupère le texte et le met dans un fichier texte, ou crée le fichier


Pour chaque widget, vous pouvez binder (lier en français) un évènement, par exemple dire lorsque l'utilisateur appuie sur telle touche, faire cela.
def recuptexte():


Voici un exemple qui récupère les touches appuyées par l'utilisateur:
    texteBrut = entree.get(0.0, END)
    filename = asksaveasfile(mode='w', defaultextension=".txt")
    filename.write(texteBrut)
    filename.close()


def clavier(event):<br/> &nbsp;&nbsp;&nbsp; touche = event.keysym<br/> &nbsp;&nbsp;&nbsp; print(touche)
#Fonction qui ouvre un texte existant
def ouvreTexte():
    file = askopenfile(mode='r', defaultextension=".txt")
    entree.delete(0.0, END)
    entree.insert(0.0, file.read())


canvas = Canvas(fenetre, width=500, height=500)<br/> canvas.focus_set()<br/> canvas.bind("<Key>", clavier)<br/> canvas.pack()
#Fonction qui insère un texte en fin de fichier
def insereTexte():
    file = askopenfile(mode='r', defaultextension=".txt")
    entree.insert(END, file.read())


On remarque que l' évènement est encadré par des chevrons .
#affiche une fenêtre avec le nom de la créatrice


D'autres évènements existent:
def credits():
    aPropos = Tk()
    label = Label(aPropos, text="Par Justine\nVive les écureuils!", bg="pink")
    label.pack()
    aPropos.mainloop()


<Button-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Click gauche<br/> <Button-2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Click milieu<br/> <Button-3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Click droit<br/> <Double-Button-1>&nbsp;&nbsp;&nbsp; : Double click droit<br/> <Double-Button-2>&nbsp;&nbsp;&nbsp; : Double click gauche<br/> <KeyPress>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Pression sur une touche<br/> <KeyPress-a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Pression sur la touche A (minuscule)<br/> <KeyPress-A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Pression sur la touche A (majuscule)<br/> <Return>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Pression sur la touche entrée<br/> <Escape>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Touche Echap<br/> <Up>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Pression sur la flèche directionnelle haut<br/> <Down>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Pression sur la flèche directionnelle bas<br/> <ButtonRelease>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Lorsque qu'on relache le click<br/> <Motion>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Mouvement de la souris<br/> <B1-Motion>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Mouvement de la souris avec click gauche<br/> <Enter>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Entrée du curseur dans un widget<br/> <Leave>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Sortie du curseur dans un widget<br/> <Configure>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Redimensionnement de la fenêtre<br/> <Map> <Unmap>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Ouverture et iconification de la fenêtre<br/> <MouseWheel>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Utilisation de la roulette


Pour supprimer la liasion de l'évènement vous pouvez utiliser les méthodes unbind ou unbind_all .
#Barre de menu


Voici un exemple où l'on peut bouger un carré avec les touches directionnelles:
menubar = Menu(window)


# fonction appellée lorsque l'utilisateur presse une touche<br/> def clavier(event):<br/> &nbsp;&nbsp;&nbsp; global coords
menu1 = Menu(menubar, tearoff=0)
menu1.add_command(label="Enregistrer", command=recuptexte)
menubar.add_cascade(label="Enregistrer", menu=menu1)


&nbsp;&nbsp;&nbsp; touche = event.keysym
menu2 = Menu(menubar, tearoff=0)
menu2.add_command(label="Ouvrir un txt", command = ouvreTexte)
menu2.add_separator()
menu2.add_command(label="Insérer un fichier", command = insereTexte)
menubar.add_cascade(label="Ouvrir...", menu=menu2)


&nbsp;&nbsp;&nbsp; if touche == "Up":<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coords = (coords[0], coords[1] - 10)<br/> &nbsp;&nbsp;&nbsp; elif touche == "Down":<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coords = (coords[0], coords[1] + 10)<br/> &nbsp;&nbsp;&nbsp; elif touche == "Right":<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coords = (coords[0] + 10, coords[1])<br/> &nbsp;&nbsp;&nbsp; elif touche == "Left":<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coords = (coords[0] -10, coords[1])<br/> &nbsp;&nbsp;&nbsp; # changement de coordonnées pour le rectangle<br/> &nbsp;&nbsp;&nbsp; canvas.coords(rectangle, coords[0], coords[1], coords[0]+25, coords[1]+25)
menu3 = Menu(menubar, tearoff=0)
menu3.add_command(label="Quitter", command = window.quit)
menubar.add_cascade(label="Quitter", menu=menu3)


# création du canvas<br/> canvas = Canvas(fenetre, width=250, height=250, bg="ivory")<br/> # coordonnées initiales<br/> coords = (0, 0)<br/> # création du rectangle<br/> rectangle = canvas.create_rectangle(0,0,25,25,fill="violet")<br/> # ajout du bond sur les touches du clavier<br/> canvas.focus_set()<br/> canvas.bind("<Key>", clavier)<br/> # création du canvas<br/> canvas.pack()
menu4 = Menu(menubar, tearoff = 0)
menu4.add_command(label="À propos", command = credits)
menubar.add_cascade(label="À propos", menu=menu4)


&nbsp;
window.config(menu=menubar)</pre>
</div>

Dernière version du 22 juin 2022 à 12:08

Python : Tkinter

  cf : http://apprendre-python.com/page-tkinter-interface-graphique-python-tutoriel
 

 

Script 1 : Une mise en oeuvre brouillonne

Un script qui met en oeuvre la plupart des commandes vues dans le tuto. Le résultat est très bizarre, mais l'important c'est que ça fonctionne :D

from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *

# -*- coding: latin-9 -*-

fenetre = Tk()

fenetre['bg']='white'

# frames

Frame1 = Frame(fenetre, borderwidth = 2, relief = GROOVE)
Frame1.pack(side=LEFT, padx=10, pady=30)

Frame2 = Frame(fenetre, borderwidth = 2, relief = GROOVE)
Frame2.pack(side=RIGHT, padx=10, pady=30)

Frame3 = Frame(fenetre, borderwidth = 2, relief = GROOVE)
Frame3.pack(side = BOTTOM, padx=10, pady = 30)

#ajout d'un bouton

bouton = Checkbutton(Frame1, text="Cocher si vous êtes heureux.")
bouton.pack()

#Ajout d'une liste

liste=Listbox(Frame2)
liste.insert(1, "Bière")
liste.insert(2, "Jus d'orange")
liste.insert(3, "Lait")
liste.pack()

#Ajout d'un canevas

canevas = Canvas(Frame3, width = 150, height = 120, background="pink")
cercle = canevas.create_oval(50, 100, 150, 50)
canevas.pack(side=LEFT)

#Ajout de labelframe

Labelframe = LabelFrame(fenetre, text="Quel est ton pourcentage de bonheur?", padx=20, pady=20)
Labelframe.pack(fill="both", expand="yes")

#Ajout d'une spinbox
s = Spinbox(Labelframe, text="A combien tu est mon amie?", from_=0, to_=100)
s.pack()

#Ajout d'une alerte sur un bouton

def bouh():
    if askyesno("Attention", "Cliquez ici"):
        showwarning("BOUH!")

    else:
        showinfo("Allez...", "Allez, clique!")

bouton2 = Button(fenetre, text="Clique Ici", command=bouh)
bouton2.pack()

#Ajout d'une barre de menu

def alert():
    showinfo("OUAF", "OUAF")

def miaou():
    showinfo("MIAOU", "MIAOU")

def ouvreImage():
    # récupération et affichage d'image

    filepath = askopenfilename(title="Ouvrir une image PNG", filetypes=[('png files', '.png'), ('all files', '.*')])
    photo2 = PhotoImage(file=filepath)
    canvas3 = Canvas(fenetre, width=photo2.width(), height=photo2.height())
    canvas3.create_image(0, 0, anchor=NW, image=photo2)
    canvas3.pack()

def ouvreTexte():
    # Récupération et affichage de txt
    filename = askopenfilename(title="Ouvrir votre document", filetypes=[('txt files', '.txt'), ('all files', '.*')])
    fichier = open(filename, "r")
    content = fichier.read()
    fichier.close()

    Label(fenetre, text=content).pack(padx=10, pady=10)

menubar = Menu(fenetre)

menu1 = Menu(menubar, tearoff=0)
menu1.add_command(label="Chien", command=alert)
menu1.add_separator()
menu1.add_command(label="Quitter", command=fenetre.quit)
menubar.add_cascade(label="Canidé", menu=menu1)

menu2 = Menu(menubar, tearoff=0)
menu2.add_command(label="Chat", command=miaou)
menubar.add_cascade(label="Félidés", menu=menu2)

menu3 = Menu(menubar, tearoff=0)
menu3.add_command(label="Ouvrir un txt", command = ouvreTexte)
menubar.add_cascade(label="Ouvrir des fichiers", menu=menu3)

fenetre.config(menu=menubar)

#Ajout d'un bouton qui change le curseur

Button(fenetre, text="croix", relief=RAISED, cursor="pirate").pack(side=LEFT)

#Ajout d'une image
photo = PhotoImage(file="squirrel.png")

canvas = Canvas(fenetre, width = 350, height = 400)
canvas.create_image(0, 0, anchor=NW, image=photo)
canvas.pack()

#Récupération d'input
def recup():
    showinfo("Alerte", entree.get())

value = StringVar()
value.set("Valeur")
entree = Entry(fenetre, textvariable=value, width=30)

bouton3 = Button(fenetre, text="Valider", command=recup)
bouton3.pack()

fenetre.mainloop()

Le fichier squirrel.png qui va avec:

Media:Squirrel.png

 


Script 2 : Un éditeur de texte

Un éditeur de texte tout simple, basé sur le widget Text de tkInter.

La fonction recup est laissée pour expliquer le fonctionnement.

from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *

# -*- coding: latin-9 -*-

#ELEMENTS GRAPHIQUES

window = Tk()

frame1 = Frame(window, borderwidth = 10, relief = GROOVE)
frame1.pack(side=LEFT, padx=10, pady=10)

#On ajoute un widget Text, qui est une fenêtre d'édition de texte
entree = Text(frame1, height=30, width=120, bg="#3f4754", fg="white")
entree.pack()

###FONCTIONS

###On fait une entrée et on récupère le texte
###Cette fonction génère une alerte, qui affiche le contenu de l'entree avec entree.get()
#La fonction get d'une entree sert à récupérer le texte qu'elle contient
#L'indice après le .get correspond à ligne.colonne : On prend tout de ligne0 colonne 0 à ligne50 colonne 50

def recup():
    showinfo("Alerte", entree.get(0.0, 50.50))

#Fonction qui récupère le texte et le met dans un fichier texte, ou crée le fichier

def recuptexte():

    texteBrut = entree.get(0.0, END)
    filename = asksaveasfile(mode='w', defaultextension=".txt")
    filename.write(texteBrut)
    filename.close()

#Fonction qui ouvre un texte existant
def ouvreTexte():
    file = askopenfile(mode='r', defaultextension=".txt")
    entree.delete(0.0, END)
    entree.insert(0.0, file.read())

#Fonction qui insère un texte en fin de fichier
def insereTexte():
    file = askopenfile(mode='r', defaultextension=".txt")
    entree.insert(END, file.read())

#affiche une fenêtre avec le nom de la créatrice

def credits():
    aPropos = Tk()
    label = Label(aPropos, text="Par Justine\nVive les écureuils!", bg="pink")
    label.pack()
    aPropos.mainloop()


#Barre de menu

menubar = Menu(window)

menu1 = Menu(menubar, tearoff=0)
menu1.add_command(label="Enregistrer", command=recuptexte)
menubar.add_cascade(label="Enregistrer", menu=menu1)

menu2 = Menu(menubar, tearoff=0)
menu2.add_command(label="Ouvrir un txt", command = ouvreTexte)
menu2.add_separator()
menu2.add_command(label="Insérer un fichier", command = insereTexte)
menubar.add_cascade(label="Ouvrir...", menu=menu2)

menu3 = Menu(menubar, tearoff=0)
menu3.add_command(label="Quitter", command = window.quit)
menubar.add_cascade(label="Quitter", menu=menu3)

menu4 = Menu(menubar, tearoff = 0)
menu4.add_command(label="À propos", command = credits)
menubar.add_cascade(label="À propos", menu=menu4)

window.config(menu=menubar)