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 04/02/2013, 00:49] – [Les diffèrentes méthodes de placements] couverture-jonathan-b | tkinter [Le 25/11/2023, 14:36] (Version actuelle) – [PyConnect] ne pas utiliser la commande ifconfig mais ip addr show Amiralgaby | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag> programmation | + | {{tag> programmation |
| ---- | ---- | ||
| ====== Créer des interfaces graphiques avec Tkinter ====== | ====== Créer des interfaces graphiques avec Tkinter ====== | ||
| Ligne 5: | Ligne 5: | ||
| ===== Présentation ===== | ===== Présentation ===== | ||
| - | **Tkinter** est une librairie | + | **Tkinter** est une bibliothèque |
| - | 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' | + | 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 ===== | ===== Installation ===== | ||
| Ligne 13: | Ligne 13: | ||
| [[: | [[: | ||
| * **[[apt> | * **[[apt> | ||
| - | * **[[apt> | + | * **[[apt> |
| - | * **[[apt> | + | * **[[apt> |
| - | Ceci peut se résumer avec l' | + | |
| - | < | + | |
| - | sudo apt-get install python-imaging-tk | + | |
| - | sudo apt-get install python3-tk | + | |
| - | </ | + | |
| - | ===== Etude d'un programme simple ===== | + | ===== Étude |
| - | Pour commencer, regardez et essayer | + | Pour commencer, regardez et essayez |
| <file python> | <file python> | ||
| Ligne 29: | Ligne 24: | ||
| # | # | ||
| # Programme Tkinter.py | # Programme Tkinter.py | ||
| - | # | + | # |
| - | from Tkinter import * #Pour python3.x Tkinter devient tkinter | + | from Tkinter import * #Pour python3.x Tkinter devient tkinter |
| class ApplicationBasic(): | class ApplicationBasic(): | ||
| Ligne 49: | Ligne 44: | ||
| self.bou_quitter.pack() | self.bou_quitter.pack() | ||
| | | ||
| - | self.fen.mainloop() | + | def run(self): |
| + | | ||
| def action(self): | def action(self): | ||
| Ligne 60: | Ligne 56: | ||
| if __name__ == ' | if __name__ == ' | ||
| app = ApplicationBasic() | app = ApplicationBasic() | ||
| + | app.run() | ||
| </ | </ | ||
| chaque partie correspond à : | chaque partie correspond à : | ||
| * importation de la librairie : <file python> | * importation de la librairie : <file python> | ||
| - | * la création d'une classe : <file python> | + | * création d'une classe : <file python> |
| - | * la création d'une méthode constructrice : <file python> | + | * création d'une méthode constructrice : <file python> |
| * instancier une fenêtre Tk() : <file python> | * instancier une fenêtre Tk() : <file python> | ||
| * définition du titre de cette fenêtre : <file python> | * définition du titre de cette fenêtre : <file python> | ||
| - | * création d'un simple bouton action : <file python> | + | * création d'un simple bouton action : <file python> |
| * configuration de ce bouton : <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> | * 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é | + | * définition de la fonction qui sera connectée |
| - | | + | |
| ''' | ''' | ||
| self.lab = Label(self.fen) | self.lab = Label(self.fen) | ||
| Ligne 87: | Ligne 84: | ||
| * assignation de la classe à une variable :<file python> | * assignation de la classe à une variable :<file python> | ||
| - | Enregistrer | + | Enregistrez |
| - | Dans un terminal : | + | < |
| - | </code> | + | |
| | | ||
| {{: | {{: | ||
| - | ===== Configurer correctement sa fenêtre | + | ===== Exemple de programmes |
| - | Nous allons voir dans cette section comment bien configurer sa fenêtre selon le but recherché. | + | ==== PyConnect |
| - | Nous prendrons comme référence les variables du programme précédent. | + | La structure du code est un peu différente car j' |
| - | Voici les principales configurations les plus utilisées : | + | |
| - | ==== Titre ==== | + | |
| - | La configuration du titre de la fenêtre s' | ||
| - | <file python> | ||
| - | |||
| - | ==== Dimensions ==== | ||
| - | |||
| - | Pour configurer la taille : | ||
| - | <file python> | ||
| - | Le code peut varier selon la logique du développeur, | ||
| <file python> | <file python> | ||
| - | self.taille | + | # |
| - | self.fen.geometry(self.taille) | + | # -*- 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 * | ||
| + | from urllib import request | ||
| + | import os | ||
| + | class Application(Frame): | ||
| + | def __init__(self,parent): | ||
| + | Frame.__init__(self) | ||
| + | self.parent = parent | ||
| + | self.etat | ||
| + | self.etat.grid(row=0, column=0, columnspan=4, | ||
| + | |||
| + | 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: | ||
| + | request.urlopen(' | ||
| + | self.etat.config(text=' | ||
| + | self.checkPing() | ||
| + | except Exception as e: | ||
| + | print(e) | ||
| + | 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() | ||
| </ | </ | ||
| - | ou encore pour un petit exemple : | + | {{:pyconnect.png?800|}} |
| - | <file python> | + | |
| - | self.fenwidth = 400 | + | |
| - | self.fenheight = 400 | + | |
| - | self.fen.geometry((self.fenwidth, | + | |
| - | </ | + | |
| - | Noter que la configuration des dimensions se fait selon le shéma: ' | + | |
| - | ==== Placement sur l' | + | |
| - | + | ||
| - | Imaginer maintenant vouloir placer une fenêtre de (400x400) centré sur votre écran. | + | |
| - | Pour ma part je créerais une fonction gérant cela : | + | |
| - | <file python> | + | |
| - | self.screenwidth = self.fen.winfo_screenwidth() | + | |
| - | self.screenheight = self.fen.winfo_screenheight() | + | |
| - | + | ||
| - | def geometry_fen(self) : | + | |
| - | ''' | + | |
| - | et créer une géométrie pour la fenêtre.''' | + | |
| - | self.fen.update_idletasks() #Recalcul des propriétés de la fenêtre en prenant en compte les widgets placés. | + | |
| - | + | ||
| - | self.fenwidth = 400 # | + | |
| - | self.fenheight = 400 # | + | |
| - | + | ||
| - | x = (self.screenwidth/ | + | |
| - | y = (self.screenheight/ | + | |
| - | + | ||
| - | self.fen.geometry(' | + | |
| - | </ | + | |
| - | Pour appliquer la géométrie, | + | |
| - | ==== Redimmensionnement ==== | + | |
| - | + | ||
| - | Le redimensionnement de la fenêtre, par défaut est vrai autant pour x et y. Cela veut dire que l' | + | |
| - | + | ||
| - | Comment interdire le redimmensionnement de la fenêtre ? | + | |
| - | <file python> | + | |
| - | self.fen.resizable(False, | + | |
| - | </ | + | |
| - | Est-il possible d' | + | |
| - | <file python> | + | |
| - | self.fen.resizable(True, | + | |
| - | self.fen.resizable(False, | + | |
| - | </ | + | |
| - | ==== Style de fenêtre ==== | + | |
| - | + | ||
| - | ===== Les 4 widgets de base ===== | + | |
| - | ==== Label ==== | + | |
| - | + | ||
| - | Le Label est utilisé pour afficher du texte dans la fenêtre. | + | |
| - | ==== Button ==== | + | |
| - | + | ||
| - | Un simple bouton cliquable. | + | |
| - | ==== Canvas ==== | + | |
| - | + | ||
| - | Le widget Canvas est le plus intéressant de tous les widgets présents dans la librairie. | + | |
| - | Pourquoi? Tout simplement parce que vous pouvez pousser vos interfaces graphiques au maximum autant dans le style que dans les fonctionnalités.... | + | |
| - | Pour une construction simple et rapide d' | + | |
| - | Vous pourrez vous apercevoir que ces trois méthodes sont limitées et particulièrement linéaires. | + | |
| - | + | ||
| - | === Un peu de géométrie === | + | |
| - | + | ||
| - | === Dessiner === | + | |
| - | + | ||
| - | === Positionner des éléments === | + | |
| - | + | ||
| - | === Déplacements d' | + | |
| - | + | ||
| - | === Créer des effets graphiques === | + | |
| - | + | ||
| - | + | ||
| - | ==== Entry ==== | + | |
| - | + | ||
| - | Zone de récupération de saisies utilisateur. | + | |
| - | + | ||
| - | ===== Les autres widgets ===== | + | |
| - | En construction | + | |
| - | + | ||
| - | ===== La configuration des widgets ===== | + | |
| - | Chaque widgets et configurable dans la limite du raisonnable :-). Nous allons voir dans cette partie comment configurer vos widgets pour s' | + | |
| - | + | ||
| - | ==== Les couleurs ==== | + | |
| - | En construction | + | |
| - | ==== La police ==== | + | |
| - | En construction | + | |
| - | ==== Les dimensions ==== | + | |
| - | En construction | + | |
| - | ==== Reliefs et bordures ==== | + | |
| - | En construction | + | |
| - | ==== Autre ==== | + | |
| - | En construction | + | |
| - | + | ||
| - | ===== Relation Fonctions/ | + | |
| - | En construction | + | |
| - | + | ||
| - | ===== Les diffèrentes méthodes de placements ===== | + | |
| - | Il existe trois méthodes de placements dans la librairie Tkinter. L' | + | |
| - | ==== Pack() ==== | + | |
| - | En construction | + | |
| - | + | ||
| - | ==== Grid() ==== | + | |
| - | En construction | + | |
| - | + | ||
| - | ==== Place() ==== | + | |
| - | En construction | + | |
| - | + | ||
| - | ===== Les événements ===== | + | |
| - | ==== Souris ==== | + | |
| - | En construction | + | |
| - | ==== Clavier ==== | + | |
| - | En construction | + | |
| - | ==== Autres ==== | + | |
| - | En construction | + | |
| - | + | ||
| - | ===== Le Canvas, un widget intéressant ===== | + | |
| - | En construction | + | |
| - | + | ||
| - | ===== Un peu de multimédia ===== | + | |
| - | En construction | + | |
| - | ==== Gérer des images ==== | + | |
| - | En construction | + | |
| - | ==== Gérer de la musique ==== | + | |
| - | En construction | + | |
| - | + | ||
| - | ===== Qu' | + | |
| - | En construction | + | |
| - | + | ||
| - | ===== Exemple de programmes ===== | + | |
| - | + | ||
| - | ==== PyQuizzz version 0.1 -- GUI - Tkinter (en cours de construction) ==== | + | |
| - | + | ||
| - | {{:capture_du_2013-02-04_00_02_19.png?direct& | + | |
| - | + | ||
| - | === L' | + | |
| - | En construction | + | |
| - | + | ||
| - | === Le code === | + | |
| - | En construction | + | |
| - | ===== Pour aller plus loin ===== | + | |
| - | En construction | + | |
| ===== Liens ===== | ===== Liens ===== | ||
| - | * [[http:// | + | * [[https:// |
| + | * [[http:// | ||
| + | * [[https:// | ||
| * [[:python]] | * [[:python]] | ||
| * [[:glade]] : pour créer des GUI facilement | * [[:glade]] : pour créer des GUI facilement | ||
| ---- | ---- | ||
| - | // | + | // |
