teaching:progappchim:tkinter_gui_simple

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édentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
teaching:progappchim:tkinter_gui_simple [2015/03/18 11:31] villersdteaching:progappchim:tkinter_gui_simple [2017/03/07 06:59] villersd
Ligne 1: Ligne 1:
 ====== Les bases d'un interface graphique avec Tkinter ====== ====== Les bases d'un interface graphique avec Tkinter ======
-<note warning>Entre Python 2 et Python 3, le nom de la librairie "Tkinter" est passé à tkinter ! (première lettre en bas de casse). L'utilisation sous Python 3 des exemples ci-dessous nécessite aussi de transformer les instructions print en print().</note> 
  
 ===== Quelques références de base pour utiliser Tkinter ===== ===== Quelques références de base pour utiliser Tkinter =====
Ligne 9: Ligne 8:
   * [[http://effbot.org/tkinterbook/|An Introduction to Tkinter, sur effbot.org]]   * [[http://effbot.org/tkinterbook/|An Introduction to Tkinter, sur effbot.org]]
   * [[http://www.python-course.eu/python_tkinter.php|Tkinter tutorial]], sur python-course.eu   * [[http://www.python-course.eu/python_tkinter.php|Tkinter tutorial]], sur python-course.eu
 +  * [[http://cs.mcgill.ca/~hv/classes/MS/TkinterPres/]]
  
-===== Un Label affichant "Bonjour !" ===== +<note warning>Entre Python 2 et Python 3, le nom de la librairie "Tkinter" est passé à tkinter ! (première lettre en bas de casse). L'utilisation sous Python 3 des exemples ci-dessous nécessite aussi de transformer les instructions print en print().</note> 
-<sxh python; title : Tk-00.py>+ 
 +===== Une étiquette (Labelaffichant "Bonjour !" ===== 
 +<code python tk-00.py>
 #!/usr/bin/env python #!/usr/bin/env python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
  
-from Tkinter import *+from tkinter import *
  
 root=Tk() root=Tk()
Ligne 22: Ligne 24:
  
 root.mainloop() root.mainloop()
-</sxh>+</code>
  
-===== Un bouton avec une action pour écrire ======+===== Un bouton (Button) avec une action pour écrire ======
 L'écriture va s'effectuer sur la console ! L'écriture va s'effectuer sur la console !
-<sxh python; title : Tk-01.py>+<code python tk-01.py>
 #!/usr/bin/env python #!/usr/bin/env python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
  
-from Tkinter import *+from tkinter import *
  
 def action(): def action():
Ligne 43: Ligne 45:
  
 root.mainloop() root.mainloop()
-</sxh>+</code> 
 <note tip>Voyez à décommenter les deux lignes concernant l'étiquette "W" !</note> <note tip>Voyez à décommenter les deux lignes concernant l'étiquette "W" !</note>
  
-===== Champ d'entrée =====+Pour le placement des composants dans la fenêtre, Tkinter utilise 3 méthodes (pack, grid, place) décrites [[http://www.python-course.eu/tkinter_layout_management.php|ici]], ou sur eefbot ([[http://effbot.org/tkinterbook/grid.htm|grid]], [[http://effbot.org/tkinterbook/pack.htm|pack]], et [[http://effbot.org/tkinterbook/place.htm|place]]). 
 + 
 +===== Champ d'entrée (Entry) =====
 On peut mettre un champ d'entrée et y introduire du texte On peut mettre un champ d'entrée et y introduire du texte
-<sxh python; title : Tk-02.py>+<code python tk-02.py>
 #!/usr/bin/env python #!/usr/bin/env python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
  
-from Tkinter import *+from tkinter import *
  
 def action(): def action():
Ligne 67: Ligne 72:
 b.grid(row=2) b.grid(row=2)
 root.mainloop() root.mainloop()
-</sxh>+</code>
 <note warning>Si on à décommente les deux lignes concernant l'étiquette "W", comment actualiser les "numéros" de row pour afficher l'étiquette, le champ d'entrée et le bouton ?!</note> <note warning>Si on à décommente les deux lignes concernant l'étiquette "W", comment actualiser les "numéros" de row pour afficher l'étiquette, le champ d'entrée et le bouton ?!</note>
  
 ===== Utiliser le texte rentré ===== ===== Utiliser le texte rentré =====
 En cliquant, on quitte et on écrit le texte rentré (on n'utilise pas la fonction "action") En cliquant, on quitte et on écrit le texte rentré (on n'utilise pas la fonction "action")
-<sxh python; title : Tk-03.py>+<code python tk-03.py>
 #!/usr/bin/env python #!/usr/bin/env python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
  
-from Tkinter import *+from tkinter import *
  
 def action(): def action():
Ligne 96: Ligne 101:
 # éliminer la fenêtre : # éliminer la fenêtre :
 root.destroy() root.destroy()
-</sxh>+</code>
  
 ===== Valeurs numériques et calcul ===== ===== Valeurs numériques et calcul =====
 On fait un calcul avec la valeur rentrée, on quitte et on écrit  On fait un calcul avec la valeur rentrée, on quitte et on écrit 
-<sxh python; title : Tk-04.py>+<code python tk-04.py>
 #!/usr/bin/env python #!/usr/bin/env python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
  
-from Tkinter import *+from tkinter import *
  
 def factorielle(argu): def factorielle(argu):
Ligne 134: Ligne 139:
 # éliminer la fenêtre : # éliminer la fenêtre :
 root.destroy() root.destroy()
-</sxh>+</code>
  
 ===== Tout faire dans interface graphique ===== ===== Tout faire dans interface graphique =====
 Ce programme utilise un Label pour afficher le résultat, on ne quitte plus et on peut recalculer sur d'autres valeurs entrées. Il y a un bouton pour terminer. Ce programme utilise un Label pour afficher le résultat, on ne quitte plus et on peut recalculer sur d'autres valeurs entrées. Il y a un bouton pour terminer.
-<sxh python; title : Tk-05.py>+<code python tk-05.py>
 #!/usr/bin/env python #!/usr/bin/env python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
  
-from Tkinter import *+from tkinter import *
  
 def factorielle(argu): def factorielle(argu):
Ligne 176: Ligne 181:
 # éliminer la fenêtre après avoir quitté : # éliminer la fenêtre après avoir quitté :
 root.destroy() root.destroy()
-</sxh>+</code>
  
 +Pour d'autres exemples, voir par exemple :
 +  * [[http://www.python-course.eu/tkinter_entry_widgets.php]]
 ===== Canvas : des rectangles et des mouvements ===== ===== Canvas : des rectangles et des mouvements =====
-<sxh python; title : Tk_canvas_rectangles_move.py>+<code python tk_canvas_rectangles_move.py>
 #! /usr/bin/env python #! /usr/bin/env python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 # Exemple utilisation du Canvas Tk pour gérer une boite avec couvercle mobile # Exemple utilisation du Canvas Tk pour gérer une boite avec couvercle mobile
  
-from Tkinter import *+from tkinter import *
  
 def move(): def move():
Ligne 211: Ligne 218:
  
 can.mainloop() can.mainloop()
 +</code>
 +
 +Pour d'autres exemples, voir par exemple : 
 +  * [[http://www.python-course.eu/tkinter_canvas.php]]
 +
 +===== Une étiquette dynamique =====
 +<sxh python; title : compteur-01.py>
 +#! /usr/bin/env python
 +# -*- coding: utf-8 -*-
 +# Exemple d'une étiquette dynamique par récursion
 +
 +import Tkinter as tk
 +
 +def compteur_label(lab):
 +    def compte():
 +        global compteur
 +        compteur += 1
 +        lab.config(text=str(compteur))
 +        lab.after(1000, compte)
 +    compte()
 + 
 + 
 +root = tk.Tk()
 +root.title("Comptage en secondes")
 +label = tk.Label(root, fg="dark green")
 +label.pack()
 +compteur = -1 
 +compteur_label(label)
 +button = tk.Button(root, text='Arrêtez !', width=25, command=root.destroy)
 +button.pack()
 +root.mainloop()
 </sxh> </sxh>
 +
 +===== Créer des points avec la souris =====
 +<sxh python; title : points_souris-02.py>
 +#!/usr/bin/env python
 +# -*- coding: utf-8 -*-
 +# créer des points à l'aide de la souris
 +# refs : 
 +# http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm
 +
 +from Tkinter import *
 +
 +def point(event):
 + can.create_oval(event.x-4, event.y-4, event.x+4, event.y+4, outline="black", fill="red")
 + points.append([event.x,event.y])
 + return
 +
 +root = Tk()
 +root.title("Créer des points !")
 +points = []
 +can = Canvas(root, bg="grey", width=640, height= 480)
 +can.configure(cursor="crosshair")
 +can.grid(row=0)
 +can.bind("<Button-1>", point)
 +b=Button(root,text="Quitter",command=root.destroy)
 +b.grid(row=1)
 +root.mainloop()
 +print points
 +</sxh>
 +
 +Pour la gestion des événements, leur déclenchement, voir par exemple [[http://www.python-course.eu/tkinter_events_binds.php|cette page]].
 +
 +===== Utiliser des boutons radio (radiobuttons) =====
 +<sxh python; title : radiobuttons.py>
 +#! /usr/bin/env python
 +# -*- coding: utf-8 -*-
 +# Exemple d'utilisation des boutons radio
 +
 +import Tkinter as tk
 +
 +def affiche_choix():
 +    i=v.get()
 +    print i, positions[i-1][0]
 +
 +root = tk.Tk()
 +v = tk.IntVar()
 +v.set(1)  # choix par défaut
 +
 +positions = [("ortho",1),("meta",2),("para",3)]
 +
 +lab=tk.Label(root, text="Choix de la position", fg="dark blue")
 +lab.pack()
 +
 +for txt, val in positions:
 +    b=tk.Radiobutton(root, text=txt, padx = 10, variable=v, command=affiche_choix, value=val)
 +    b.pack()
 +
 +tk.mainloop()
 +</sxh>
 +
 +===== Utiliser des cases à cocher (checkbuttons) =====
 +<sxh python; title : checkbuttons-03.py>
 +#! /usr/bin/env python
 +# -*- coding: utf-8 -*-
 +# Exemple d'utilisation des cases à cocher
 +
 +import Tkinter as tk
 +
 +def affiche_choix():
 +    print zip(elements, [etats[i].get() for i in range(len(elements))])
 +
 +root = tk.Tk()
 +lab=tk.Label(root, text="Cochez les éléments présents", bg="red", fg="dark blue")
 +lab.grid(row = 0)
 +
 +elements=['C','H','O','N','P','S',u'éléments métalliques',u'halogénures',u'autres']
 +etats=[]
 +nelem=len(elements)
 +
 +for i in range(nelem):
 +    etat=tk.IntVar()
 +    caco = tk.Checkbutton(root, text=elements[i], variable=etat,width = 20,padx=50,anchor = tk.W)
 +    caco.grid(row = i+1)
 +    etats.append(etat)
 +
 +button = tk.Button(root, text='Affichez !', width=25, command=affiche_choix)
 +button.grid(row = nelem+1)
 +
 +tk.mainloop()
 +</sxh>
 +
 +===== Les listes de choix (spinbox, listbox) =====
 +FIXME (à écrire)
 +
 +===== Insérer une image (photoimage) =====
 +FIXME (à écrire)
 +
 +===== Autres composants logiciels (widgets) de Tkinter =====
 +Voici une liste et des liens vers des exemples pour d'autres widgets :
 +
 +^Widgets ^ Exemples ^  
 +|Sliders (curseur de défilement) |[[http://www.python-course.eu/tkinter_sliders.php]] |
 +|Texte |[[http://www.python-course.eu/tkinter_text_widget.php]]|
 +|Boites de dialogue |[[http://www.python-course.eu/tkinter_dialogs.php]]|
 +|Menus |[[http://www.python-course.eu/tkinter_menus.php]]|
 +|Barres de progression (progressbar) | |
 +|Échelles (scale) | |
 +
 +Références et démonstrations :
 +  * [[http://www.shido.info/py/python6_e.html]]
 +  * [[http://pythonfacile.free.fr/python/demotkinter.html]]
 +  * [[http://tkinter.unpythonic.net/wiki/A_tour_of_Tkinter_widgets]]
 +  * [[http://pyinmyeye.blogspot.be/2012/07/tkinter-demos.html]]
 +  * 
 +===== Des exemples d'application =====
 +  * [[http://www.python-course.eu/tkinter_mastermind.php|Mastermind]]
  
  • teaching/progappchim/tkinter_gui_simple.txt
  • Dernière modification : 2023/01/19 15:46
  • de villersd