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 | ||
tkinter [Le 31/01/2013, 19:28] – 88.172.93.113 | tkinter [Le 04/05/2018, 14:13] (Version actuelle) – [Étude d'un programme simple] 78.253.251.33 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> programmation python}} | ||
+ | ---- | ||
+ | ====== Créer des interfaces graphiques avec Tkinter ====== | ||
+ | ===== Présentation ===== | ||
+ | |||
+ | **Tkinter** est une librairie basique mais très simple d' | ||
+ | |||
+ | Le style de widgets n'est pas très esthétique (question de goût) mais ça reste tout de même une bonne base pour commencer dans le développement d' | ||
+ | |||
+ | ===== Installation ===== | ||
+ | |||
+ | [[: | ||
+ | * **[[apt> | ||
+ | * **[[apt> | ||
+ | * **[[apt> | ||
+ | |||
+ | ===== Étude d'un programme simple ===== | ||
+ | Pour commencer, regardez et essayez de comprendre la structure du code : | ||
+ | |||
+ | <file python> | ||
+ | # | ||
+ | # -*- coding: Latin-1 -*- | ||
+ | # | ||
+ | # Programme Tkinter.py | ||
+ | # Démonstration du language | ||
+ | |||
+ | |||
+ | from Tkinter import * #Pour python3.x Tkinter devient tkinter | ||
+ | |||
+ | class ApplicationBasic(): | ||
+ | ''' | ||
+ | def __init__(self): | ||
+ | ''' | ||
+ | self.fen = Tk() | ||
+ | self.fen.title(' | ||
+ | |||
+ | self.bou_action = Button(self.fen) | ||
+ | self.bou_action.config(text=' | ||
+ | self.bou_action.pack() | ||
+ | |||
+ | self.bou_quitter = Button(self.fen) | ||
+ | self.bou_quitter.config(text=' | ||
+ | self.bou_quitter.pack() | ||
+ | | ||
+ | def run(self): | ||
+ | self.fen.mainloop() | ||
+ | |||
+ | def action(self): | ||
+ | ''' | ||
+ | self.lab = Label(self.fen) | ||
+ | self.lab.config(text=' | ||
+ | self.lab.pack() | ||
+ | | ||
+ | | ||
+ | if __name__ == ' | ||
+ | app = ApplicationBasic() | ||
+ | app.run() | ||
+ | </ | ||
+ | chaque partie correspond à : | ||
+ | * importation de la librairie : <file python> | ||
+ | * création d'une classe : <file python> | ||
+ | * création d'une méthode constructrice : <file python> | ||
+ | * instancier une fenêtre Tk() : <file python> | ||
+ | * définition du titre de cette fenêtre : <file python> | ||
+ | |||
+ | * création d'un simple bouton action : <file python> | ||
+ | * configuration de ce bouton : <file python> | ||
+ | * mise en place de celui-ci dans la fenêtre avec une méthode de placement : <file python> | ||
+ | * définition de la fonction qui sera connectée au bouton //Action// : <file python> | ||
+ | def action(self) : | ||
+ | ''' | ||
+ | self.lab = Label(self.fen) | ||
+ | self.lab.config(text=' | ||
+ | self.lab.pack() | ||
+ | </ | ||
+ | |||
+ | * même travail pour créer un bouton quitter. Ici vous constaterez qu'il n'est pas nécessaire de créer une fonction dédiée à ce bouton, la commande associée faisant le nécessaire : <file python> | ||
+ | self.bou_quitter.config(text=' | ||
+ | self.bou_quitter.pack()</ | ||
+ | |||
+ | |||
+ | * lancement du gestionnaire d' | ||
+ | * assignation de la classe à une variable :<file python> | ||
+ | |||
+ | Enregistrez votre fichier source avec une extension //.py// puis lancez-le depuis un [[: | ||
+ | < | ||
+ | |||
+ | | ||
+ | {{: | ||
+ | |||
+ | ===== Exemple de programmes ===== | ||
+ | ==== PyConnect ==== | ||
+ | La structure du code est un peu différente car j' | ||
+ | |||
+ | <file python> | ||
+ | # | ||
+ | # -*- coding: utf-8 -*- | ||
+ | # | ||
+ | # PyConnect.py | ||
+ | # | ||
+ | # Vérification de la connexion internet avec interface et ping | ||
+ | # | ||
+ | |||
+ | # | ||
+ | #Tkinter pour l' | ||
+ | #urllib pour les schémas internet | ||
+ | #os pour dialoguer avec le systeme | ||
+ | from Tkinter import * | ||
+ | import urllib as url | ||
+ | import os | ||
+ | class Application(Frame): | ||
+ | def __init__(self, | ||
+ | Frame.__init__(self) | ||
+ | self.parent = parent | ||
+ | self.etat = Label(self, text='', | ||
+ | self.etat.grid(row=0, | ||
+ | |||
+ | self.lab_iface = Label(self, text=' | ||
+ | self.lab_iface.grid(row=1, | ||
+ | |||
+ | self.iface = Text(self, font=' | ||
+ | self.iface.grid(row=2, | ||
+ | |||
+ | self.lab_ping = Label(self, text=' | ||
+ | self.lab_ping.grid(row=1, | ||
+ | |||
+ | self.ping = Text(self, font=' | ||
+ | self.ping.grid(row=2, | ||
+ | |||
+ | self.recharger = Button(self, | ||
+ | self.recharger.grid(row=3, | ||
+ | |||
+ | self.quitter = Button(self, | ||
+ | self.quitter.grid(row=3, | ||
+ | |||
+ | self.checkIface() | ||
+ | |||
+ | def checkIface(self): | ||
+ | self.iface.config(state=' | ||
+ | self.iface.delete(1.0, | ||
+ | self.listing = os.popen(' | ||
+ | self.iface.insert(END, | ||
+ | self.iface.config(state=' | ||
+ | self.checkInternet() | ||
+ | |||
+ | def checkInternet(self): | ||
+ | try: | ||
+ | url.urlopen(' | ||
+ | self.etat.config(text=' | ||
+ | self.checkPing() | ||
+ | except: | ||
+ | self.etat.config(text=' | ||
+ | self.ping.config(state=' | ||
+ | self.ping.delete(1.0, | ||
+ | self.ping.insert(END, | ||
+ | self.ping.config(state=' | ||
+ | |||
+ | def checkPing(self): | ||
+ | self.ping.config(state=' | ||
+ | self.ping.delete(1.0, | ||
+ | c = 3 | ||
+ | while c != 0: | ||
+ | self.pingPacket = os.popen(' | ||
+ | self.ping.insert(END, | ||
+ | self.parent.after(1, | ||
+ | c = c-1 | ||
+ | |||
+ | self.ping.config(state=' | ||
+ | |||
+ | def leave(self): | ||
+ | quit() | ||
+ | |||
+ | if __name__ == ' | ||
+ | fen = Tk() | ||
+ | fen.title(' | ||
+ | fen.resizable(False, | ||
+ | |||
+ | app = Application(fen) | ||
+ | app.grid(row=0, | ||
+ | |||
+ | fen.mainloop() | ||
+ | </ | ||
+ | {{: | ||
+ | ===== Liens ===== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[:python]] | ||
+ | * [[:glade]] : pour créer des GUI facilement | ||
+ | |||
+ | ---- | ||
+ | // |