Modifications entre les versions 2 et 4 (s'étendant sur 2 versions)
Version 2 à la date du 2013-05-21 14:20:10
Taille: 0
Éditeur: iml138
Commentaire:
Version 4 à la date du 2014-05-13 21:24:28
Taille: 2898
Éditeur: dra13-2-82-237-244-11
Commentaire:
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
= Interfaces graphiques en Python et Tkinter =

Ceci correspond à la séance 1B5 de la formation 2013-2014.

Il y a de nombreuses bibliothèques pour créer des interfaces graphiques: [[http://www.gtk.org/|Gtk+]], [[http://qt-project.org/|Qt]], [[http://www.wxwidgets.org/|wxWidgets]], qui sont utilisables en Python. Cela fonctionne toujours un peu pareil, même si chacune a ses spécificités. Ici, on utilisera la bibliothèque [[https://docs.python.org/3/library/tkinter.html|tkinter]], qui est la présentation en Python de la bibliothèque [[http://www.tcl.tk/|Tcl/Tk]]. La raison principale est qu'elle fait partie des bibliothèques standard de Python et qu'à ce titre elle est installée d'office et interagit bien avec les environnements de développement comme Idle.

== Démarrage ==

L'incontournable premier programme avec `tkinter` ressemble à ceci:

{{{#!highlight python
from tkinter import *
fenetre = Frame()
fenetre.pack()
texte = Label(fenetre, text="Salut!")
texte.pack()
fenetre.mainloop()
}}}

Tapez ce programme et lancez-le, vous verrez apparaître une fenêtre qui dit juste "Salut". Le programme se terminera quand vous fermerez la fenêtre.

Quelques explications:

 * La bibliothèque s'appelle simplement `tkinter`. On l'inclut avec cette forme pour simplifier l'écriture des programmes.
   /!\ Les exemples sont en Python 3. En Python 2, tout est pareil sauf qu'on écrit `Tkinter` avec une majuscule!

 * Les éléments d'interface sont créés par les appels à `Frame` et `Label` qui construisent des objets des classes portant ce nom. Le premier désigne la fenêtre principale (celle qui contient l'interface) et le deuxième désigne l'élément de texte qui y est affiché. Chaque élément est contenu dans un autre élément (l'agument du constructeur), sauf la fenêtre principale. Le deuxième argument (nommé) du constructeur `Label` sert à ''configurer'' l'élément que l'on crée: `text` précise le texte, d'autres `options` précisent d'autres aspects.

 * La méthode `pack()` sert à positionner un élément dans son conteneur. Tant qu'on ne l'appelle pas, l'élément n'est pas affiché.

 * La méthode `mainloop()` passe la main à l'interface graphique: elle affiche ce qui doit être affiché et attend des actions de l'utilisateur. Elle rend la main quand toutes les fenêtres ouverts ont été fermées.

== Ajout d'éléments ==

Ajoutons un bouton à la fenêtre: avant l'appel à `mainloop`, on ajoute

{{{#!highlight python
bouton = Button(fenetre, text="Hop")
bouton.pack()
}}}

Et on a un bouton en dessous du message, mais ce bouton ne fait rien.

Pour ajouter une action, on utilise le paramètre `command` qui attend comme valeur une fonction:

{{{#!highlight python
def action():
    print "Clic."

bouton = Button(fenetre, text="Hop", command=action)
bouton.pack()
}}}

Interfaces graphiques en Python et Tkinter

Ceci correspond à la séance 1B5 de la formation 2013-2014.

Il y a de nombreuses bibliothèques pour créer des interfaces graphiques: Gtk+, Qt, wxWidgets, qui sont utilisables en Python. Cela fonctionne toujours un peu pareil, même si chacune a ses spécificités. Ici, on utilisera la bibliothèque tkinter, qui est la présentation en Python de la bibliothèque Tcl/Tk. La raison principale est qu'elle fait partie des bibliothèques standard de Python et qu'à ce titre elle est installée d'office et interagit bien avec les environnements de développement comme Idle.

Démarrage

L'incontournable premier programme avec tkinter ressemble à ceci:

   1 from tkinter import *
   2 fenetre = Frame()
   3 fenetre.pack()
   4 texte = Label(fenetre, text="Salut!")
   5 texte.pack()
   6 fenetre.mainloop()

Tapez ce programme et lancez-le, vous verrez apparaître une fenêtre qui dit juste "Salut". Le programme se terminera quand vous fermerez la fenêtre.

Quelques explications:

  • La bibliothèque s'appelle simplement tkinter. On l'inclut avec cette forme pour simplifier l'écriture des programmes.

    • /!\ Les exemples sont en Python 3. En Python 2, tout est pareil sauf qu'on écrit Tkinter avec une majuscule!

  • Les éléments d'interface sont créés par les appels à Frame et Label qui construisent des objets des classes portant ce nom. Le premier désigne la fenêtre principale (celle qui contient l'interface) et le deuxième désigne l'élément de texte qui y est affiché. Chaque élément est contenu dans un autre élément (l'agument du constructeur), sauf la fenêtre principale. Le deuxième argument (nommé) du constructeur Label sert à configurer l'élément que l'on crée: text précise le texte, d'autres options précisent d'autres aspects.

  • La méthode pack() sert à positionner un élément dans son conteneur. Tant qu'on ne l'appelle pas, l'élément n'est pas affiché.

  • La méthode mainloop() passe la main à l'interface graphique: elle affiche ce qui doit être affiché et attend des actions de l'utilisateur. Elle rend la main quand toutes les fenêtres ouverts ont été fermées.

Ajout d'éléments

Ajoutons un bouton à la fenêtre: avant l'appel à mainloop, on ajoute

   1 bouton = Button(fenetre, text="Hop")
   2 bouton.pack()

Et on a un bouton en dessous du message, mais ce bouton ne fait rien.

Pour ajouter une action, on utilise le paramètre command qui attend comme valeur une fonction:

   1 def action():
   2     print "Clic."
   3 
   4 bouton = Button(fenetre, text="Hop", command=action)
   5 bouton.pack()

WikISN: 1B4 (dernière édition le 2014-05-14 14:15:15 par 178)