Créer une interface graphique sous Debian en Python avec Tkinter

J’utilise Debian 10 Buster et Python 3.7.3.

Le but ici est de créer une interface graphique pour une application en Python. Dans mon cas, il s’agit de saisir des données.

Prérequis :

Pour Python 3 , depuis un terminal en administrateur root :

apt-get install python3-tk

Pour importer la bibliothèque dans votre programme :

from tkinter import *


Exemple avec la méthode pack

On a déjà vu comment lire ou enregistrer des variables, depuis ou vers un fichier. Ici, on voit comment créer une interface graphique avec Tkinter pour saisir des valeurs dans des variables.

Mon interface graphique sous Debian

Si votre application est graphique ou que votre code fait une tâche de fond, vous pouvez renommer votre fichier avec l’extension .pyw (plutôt que .py) pour dissimuler le Shell. Si vous nommer mon script Python en .py, vous verrez le résultat de votre saisie dans le Shell.

À noter que l’on peut saisir des valeurs dans des variables sans interface graphique avec la fonction input().

Je débute en Python, si vous avez des idées pour améliorer le code, je suis à votre écoute. Tous les conseils sont les biens venus.

Je pense que l’on pourrait par exemple, améliorer la disposition des widgets.

Voici mon code :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-

from tkinter import * #On importe l'ensemble du module Tkinter

def enregister(): #Ma fonction
    serveursmb = Serveur_Entry.get() # lecture du contenu du widget "Serveur_Entry"
    partagesmb = Partage_Entry.get() # lecture du contenu du widget "Partage_Entry"
    utilisateur = Utilisateur_Entry.get() # lecture du contenu du widget "Utilisateur_Entry"
    mot_de_passe = Mot_de_passe_Entry.get() # lecture du contenu du widget "Mot_de_passe_Entry"
    domaine = Domaine_Entry.get() # lecture du contenu du widget "Domaine_Entry"
    fichier_diaporama = Fichier_du_diaporama_Entry.get() # lecture du contenu du widget "Fichier_du_diaporama_Entry"
    print(serveursmb) #Affichage des données saisies dans le terminal
    print(partagesmb)
    print(utilisateur)
    print(mot_de_passe)
    print(domaine)
    print(fichier_diaporama)
    Fenetre.destroy() #Fermeture de la fenêtre

#Mon programme
Fenetre = Tk() #création de la fenêtre, avec un nom de votre choix Fenetre
Fenetre.title('Paramètres Diaporama') #Titre de la fenêtre

Serveur_Label= Label(Fenetre, text = 'Votre serveur :') #Un label pour afficher du texte
Serveur_Entry= Entry(Fenetre) #On définit l'objet Entry (zone de saisie) qui porte le nom Serveur_Entry
Partage_Label= Label(Fenetre, text = 'Votre partage réseau :')
Partage_Entry= Entry(Fenetre) 
Utilisateur_Label= Label(Fenetre, text = 'Votre utilisateur :')
Utilisateur_Entry= Entry(Fenetre)
Mot_de_passe_Label= Label(Fenetre, text = 'Votre mot de passe :')
Mot_de_passe_Entry= Entry(Fenetre)
Domaine_Label= Label(Fenetre, text = 'Votre nom de domaine:')
Domaine_Entry= Entry(Fenetre)
Fichier_du_diaporama_Label= Label(Fenetre, text = 'Votre fichier de diaporama :')
Fichier_du_diaporama_Entry= Entry(Fenetre)
Mon_bouton = Button(Fenetre, text =' Enregistrer', command=enregister) #Mon bouton - Un clic et on lance la fonction enregistrer

Serveur_Label.pack() # insère les Widgets dans la fenêtre
Serveur_Entry.pack()
Partage_Label.pack()
Partage_Entry.pack() 
Utilisateur_Label.pack()
Utilisateur_Entry.pack()
Mot_de_passe_Label.pack()
Mot_de_passe_Entry.pack()
Domaine_Label.pack()
Domaine_Entry.pack()
Fichier_du_diaporama_Label.pack()
Fichier_du_diaporama_Entry.pack()
Mon_bouton.pack()

affichage = Label(Fenetre, width=50)
affichage.pack()

Fenetre.mainloop() # lance la boucle principale

Exemple avec la méthode grid

Un nouvel exemple où l’on utilise la méthode grid ce qui permet de mieux disposer les widgets.

Mon interface graphique sous Debian

Voici mon code :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
from tkinter import *
Fenetre = Tk() #création de la fenêtre, avec un nom de votre choix Fenetre
Fenetre.title('Paramètres Diaporama') #Titre de la fenêtre
Fenetre.geometry("420x170") # On définit la taille de la fenêtre
#Création d'un interface graphique avec grid
#Remplacer les méthodes pack() par les méthodes grid() 
Serveur_Label= Label(Fenetre, text = 'Votre serveur :') #Un label pour afficher du texte
Serveur_Label.grid(row=0)
Serveur_Entry= Entry(Fenetre) #On définit l'objet Entry (zone de saisie) qui porte le nom Serveur_Entry
Serveur_Entry.grid(row=0,column=1,ipadx=30) # ipadx=30 pour créer 10 pixels de plus horizontalement
Partage_Label= Label(Fenetre, text = 'Votre partage réseau :')
Partage_Label.grid(row=1,column=0)
Partage_Entry= Entry(Fenetre) 
Partage_Entry.grid(row=1,column=1,ipadx=30)
Utilisateur_Label= Label(Fenetre, text = 'Votre utilisateur :')
Utilisateur_Label.grid(row=2,column=0)
Utilisateur_Entry= Entry(Fenetre)
Utilisateur_Entry.grid(row=2,column=1,ipadx=30)
Mot_de_passe_Label= Label(Fenetre, text = 'Votre mot de passe :')
Mot_de_passe_Label.grid(row=3,column=0)
Mot_de_passe_Entry= Entry(Fenetre)
Mot_de_passe_Entry.grid(row=3,column=1,ipadx=30)
Domaine_Label= Label(Fenetre, text = 'Votre nom de domaine:')
Domaine_Label.grid(row=4,column=0)
Domaine_Entry= Entry(Fenetre)
Domaine_Entry.grid(row=4,column=1,ipadx=30)
Fichier_du_diaporama_Label= Label(Fenetre, text = 'Votre fichier de diaporama :')
Fichier_du_diaporama_Label.grid(row=5,column=0)
Fichier_du_diaporama_Entry= Entry(Fenetre)
Fichier_du_diaporama_Entry.grid(row=5,column=1,ipadx=30)
Mon_bouton = Button(Fenetre, text =' Enregistrer')
Mon_bouton.grid(row=6,column=1,ipadx=40)
Fenetre.mainloop() # lance la boucle principale

Exemple avec la méthode place

La méthode place permet de placer les widgets sur les axes de coordonnées.

En exemple, je me suis inspiré de l’interface du programme Lexibar espagnol très apprécié de nos professeurs de collège.

Mon interface graphique sous Debian

Voici mon code :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
from tkinter import *

Fenetre = Tk() #Création de la fenêtre, avec un nom de votre choix Fenetre
Fenetre.title('Lexidom') #Titre de la fenêtre
Fenetre.geometry("340x60") #On définit la taille de la fenêtre
#Création et affichage des boutons
Mon_bouton1 = Button(Fenetre, text = 'á', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton1.place (x = 0, y = 3)
Mon_bouton2 = Button(Fenetre, text = 'é', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton2.place (x = 30, y = 3)
Mon_bouton3 = Button(Fenetre, text = 'í', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton3.place (x = 60, y = 3)

Mon_bouton4 = Button(Fenetre, text = 'ó', width = 2, height = 2, bg = 'yellow', font = 'bold')
Mon_bouton4.place (x = 90, y = 3)
Mon_bouton5 = Button(Fenetre, text = 'ú', width = 2, height = 2, bg = 'yellow', font = 'bold')
Mon_bouton5.place (x = 120, y = 3)
Mon_bouton6 = Button(Fenetre, text = 'ü', width = 2, height = 2, bg = 'yellow', font = 'bold')
Mon_bouton6.place (x = 150, y = 3)

Mon_bouton7 = Button(Fenetre, text = 'ñ', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton7.place (x = 180, y = 3)
Mon_bouton8 = Button(Fenetre, text = '¿', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton8.place (x = 210, y = 3)
Mon_bouton9 = Button(Fenetre, text = '¡', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton9.place (x = 240, y = 3)

Mon_bouton10 = Button(Fenetre, text ='Maj/Min', width = 8, height = 3)
Mon_bouton10.place (x = 270, y = 3)

Fenetre.mainloop() # lance la boucle principale

Plus d’informations sur la programmation Python/Tkinter :

https://fr.wikibooks.org/wiki/Programmation_Python/Tkinter

Une réflexion au sujet de « Créer une interface graphique sous Debian en Python avec Tkinter »

  1. Ping : Programmer en Python sous Debian | Artheodoc

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s