Créer des interfaces graphiques avec Tkinter

Tkinter est une bibliothèque basique mais très simple d'utilisation pour construire rapidement des interfaces graphiques avec Python.

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'interface graphique (GUI).

Installez les paquets:

Pour commencer, regardez et essayez de comprendre la structure du code :

#!/usr/bin/env python
# -*- coding: Latin-1 -*-
#
#  Programme Tkinter.py
#  Démonstration du language
 
 
from Tkinter import * #Pour python3.x Tkinter devient tkinter
 
class ApplicationBasic():
	'''Application principale'''
	def __init__(self):
		'''constructeur'''
		self.fen = Tk()
		self.fen.title('Tkinter')
 
		self.bou_action = Button(self.fen)
		self.bou_action.config(text='Action', command=self.action)
		self.bou_action.pack()
 
		self.bou_quitter = Button(self.fen)
		self.bou_quitter.config(text='Quitter', command=self.fen.destroy)
		self.bou_quitter.pack()
 
	def run(self):
                self.fen.mainloop()
 
	def action(self):
		'''Action sur un bouton'''
		self.lab = Label(self.fen)
		self.lab.config(text='Bravo!!!')
		self.lab.pack()
 
 
if __name__ == '__main__':
	app = ApplicationBasic()
        app.run()

chaque partie correspond à :

  • importation de la librairie :
    from Tkinter import *
  • création d'une classe :
    class ApplicationBasic():
  • création d'une méthode constructrice :
    def __init__(self):
  • instancier une fenêtre Tk() :
    self.fen = Tk()
  • définition du titre de cette fenêtre :
    self.fen.title('Tkinter')
  • création d'un simple bouton action :
    self.bou_action = Button(self.fen)
    • configuration de ce bouton :
      self.bou_action.config(text='Action', command=self.action)
    • mise en place de celui-ci dans la fenêtre avec une méthode de placement :
      self.bou_action.pack()
    • définition de la fonction qui sera connectée au bouton Action :
        def action(self) :
            '''Action sur un bouton'''
            self.lab = Label(self.fen)
            self.lab.config(text='Bravo!!!')
            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 :
    self.bou_quitter = Button(self.fen)
    self.bou_quitter.config(text='Quitter', command=self.fen.destroy)
    self.bou_quitter.pack()
  • lancement du gestionnaire d'événements :
    self.fen.mainloop()
  • assignation de la classe à une variable :
    app = ApplicationBasic()

Enregistrez votre fichier source avec une extension .py puis lancez-le depuis un terminal en saisissant la commande suivante:

python 'fichier.py'

Fenêtre nommée Tkinter avec les deux boutons Fenêtre Tkinter après appui sur le bouton //Action//

PyConnect

La structure du code est un peu différente car j'utilise une classe.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  PyConnect.py
#
# Vérification de la connexion internet avec interface et ping
#
 
#Importation des librairies nécéssaire au bon fonctionnement du programme.
#Tkinter pour l'interface graphique
#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 = Label(self, text='',font='Times 28 italic bold')
		self.etat.grid(row=0, column=0, columnspan=4, sticky=NSEW)
 
		self.lab_iface = Label(self, text='Interfaces:',font='Times',underline=0)
		self.lab_iface.grid(row=1,column=0,sticky=NSEW)
 
		self.iface = Text(self, font='Times 10')
		self.iface.grid(row=2, column=0, sticky=NSEW)
 
		self.lab_ping = Label(self, text='Ping:',font='Times',underline=0)
		self.lab_ping.grid(row=1,column=2,sticky=NSEW)
 
		self.ping = Text(self, font='Times',state='disabled')
		self.ping.grid(row=2, column=1, columnspan=3, sticky=NSEW)
 
		self.recharger = Button(self, text='Recharger', font='Times', command=self.checkIface)
		self.recharger.grid(row=3, column=0, sticky=NSEW)
 
		self.quitter = Button(self, text='Quitter', font='Times', command=self.leave)
		self.quitter.grid(row=3, column=1, columnspan=3,sticky=NSEW)
 
		self.checkIface()
 
	def checkIface(self):
		self.iface.config(state='normal')
		self.iface.delete(1.0,END)
		self.listing = os.popen('ip addr show', 'r').read()
		self.iface.insert(END, self.listing)
		self.iface.config(state='disabled')
		self.checkInternet()
 
	def checkInternet(self):
		try:
			request.urlopen('http://www.google.com')
			self.etat.config(text='Connexion internet active')
			self.checkPing()
		except Exception as e:
                    print(e)
                    self.etat.config(text='Connexion internet inactive')
                    self.ping.config(state='normal')
                    self.ping.delete(1.0,END)
                    self.ping.insert(END, 'Ping impossible...')
                    self.ping.config(state='disabled')
 
	def checkPing(self):
		self.ping.config(state='normal')
		self.ping.delete(1.0,END)
		c = 3
		while c != 0:
			self.pingPacket = os.popen('ping -c 1 google.com').read()
			self.ping.insert(END, self.pingPacket+'\n')
			self.parent.after(1,self.parent.update())
			c = c-1
 
		self.ping.config(state='disabled')
 
	def leave(self):
		quit()
 
if __name__ == '__main__':
	fen = Tk()
	fen.title('Connexion Internet')
	fen.resizable(False,False)
 
	app = Application(fen)
	app.grid(row=0, column=0, sticky=NSEW)
 
	fen.mainloop()


Contributeurs:Boileau jonathan – Mail: couverture.jonathan.b@gmail.com

  • tkinter.txt
  • Dernière modification: Le 25/11/2023, 14:36
  • par Amiralgaby