Comment construire une calculatrice dans Tkinter

Python fournit de nombreux outils pour la science des données, le développement Web et Android. Mais l'un des meilleurs outils en matière de langage de programmation Python est Tkinter pour l'interface utilisateur graphique. La bibliothèque Tkinter en python fournit des widgets GUI qui aident à créer des applications conviviales. Tkinter est facile à utiliser, léger et rapide. Vous n'avez pas besoin d'installer explicitement Tkinter car il est préinstallé avec Python.

Vous devez connaître les bases du package Tkinter en Python avant de poursuivre ce didacticiel.

Configuration de base pour l'application

1. Importation du module

La première étape de la création de l'application consiste à importer le module. Lors de l'importation du module Tkinter, vous devrez instancier l'objet ttk .

 import tkinter as ttk

2. Création de la variable de fenêtre

Pour créer une fenêtre, vous devez créer un objet fenêtre à l'aide de ttk . Après avoir créé un objet fenêtre, vous pouvez attribuer un titre et une géométrie à la fenêtre. La géométrie définira la hauteur et la largeur de la fenêtre.

 win = ttk.Tk()
win.title('Simple Calculator')
win.geometry('500x500')

3. Boucle principale

La méthode mainloop() exécute la fenêtre dans une boucle infinie. Il s'exécute en continu, sauf si l'utilisateur ferme la fenêtre manuellement.

 win.mainloop()

Connexe: Commencez à créer des applications de bureau en Python avec la bibliothèque d'interface graphique Tkinter

Construire l'interface utilisateur

Le package Tkinter en Python contient de nombreux widgets qui aident à créer des conceptions conviviales. Les widgets utilisés dans ce projet sont des champs de bouton et de texte . Pour ce projet, vous avez besoin des boutons suivants : nombres 0-9 , additionner , soustraire , multiplication , division , effacer , supprimer , calculer .

 oneButton = ttk.Button(win, text="1", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(1))
oneButton.grid(row=2, column=0,padx=2, pady=3)
twoButton = ttk.Button(win, text="2", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(2))
twoButton.grid(row=2, column=1, padx=2, pady=3)
threeButton = ttk.Button(win, text="3", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(3))
threeButton.grid(row=2, column=2, padx=2, pady=3)
plusButton = ttk.Button(win, text="+", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("+"))
plusButton.grid(row=2, column=3, padx=2, pady=3)
# div 2
fourButton = ttk.Button(win, text="4", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(4))
fourButton.grid(row=3, column=0, padx=2, pady=3)
fiveButton = ttk.Button(win, text="5", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(5))
fiveButton.grid(row=3, column=1, padx=2, pady=3)
sixButton = ttk.Button(win, text="6", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(6))
sixButton.grid(row=3, column=2, padx=2, pady=3)
minusButton = ttk.Button(win, text="-", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("-"))
minusButton.grid(row=3, column=3, padx=2, pady=3)
# div 3
sevenButton = ttk.Button(win, text="7", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(7))
sevenButton.grid(row=4, column=0, padx=2, pady=3)
eightButton = ttk.Button(win, text="8", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(8))
eightButton.grid(row=4, column=1, padx=2, pady=3)
nineButton = ttk.Button(win, text="9", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(9))
nineButton.grid(row=4, column=2, padx=2, pady=3)
muxButton = ttk.Button(win, text="x", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("*"))
muxButton.grid(row=4, column=3, padx=2, pady=3)
#div 4
zeroButton = ttk.Button(win, text="0", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(0))
zeroButton.grid(row=5, column=0, padx=2, pady=3)
clearButton = ttk.Button(win, text="clr", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=clearInput)
clearButton.grid(row=5, column=1, padx=2, pady=3)
calculateButton = ttk.Button(win, text="cal", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=calculateEq)
calculateButton.grid(row=5, column=2, padx=2, pady=3)
divideButton = ttk.Button(win, text="/", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("/"))
divideButton.grid(row=5, column=3, padx=2, pady=3)

Le widget bouton accepte de nombreux arguments : l'objet fenêtre, le texte affiché sur le bouton, le style de police, etc. Il accepte également un argument de commande qui exécute une fonction ou une méthode lorsque vous cliquez sur le bouton.

Pour aligner les boutons dans les lignes et les colonnes pour une interface utilisateur conviviale, utilisez l'attribut grid . L'attribut grid accepte le numéro de ligne et le numéro de colonne comme arguments pour aligner les boutons en conséquence.

 numericEq = ttk.StringVar()
dataField = ttk.Entry(win, textvariable=numericEq, font="Serif 15")
dataField.grid(row=0,columnspan=3, ipadx=80, ipady=15)

Le widget Entry est la zone de texte du package Python Tkinter. Habituellement, le champ Entrée accepte de nombreux arguments, mais l'un des arguments les plus cruciaux et les plus requis est textvariable . L'utilisateur peut taper dans le champ Entrée à cause de cet argument. Dans le code ci-dessus, une variable nommée numericEq se voit attribuer un attribut ttk.StringVar() pour gérer le widget Entry .

Connexe : Apprendre Python ? Voici comment manipuler des chaînes

Vous pouvez exécuter le fichier Python à l'aide de la commande python file_name.py . L'application ressemble à ceci :

Ajout de fonctionnalités aux boutons :

Comme nous l'avons mentionné précédemment, le widget Button a un attribut de commande qui accepte une fonction ou une méthode à appeler. Les méthodes transmises lorsque les boutons sont cliqués utilisent la fonction lambda .

1. Boutons numériques et arithmétiques

Les boutons numériques sont constitués de valeurs de 0 à 9 et les boutons arithmétiques sont +, -, x, / à des fins de calcul.

La méthode addToEq() est appelée en cliquant sur le bouton. Cette méthode transmet des nombres ou des opérateurs arithmétiques selon le bouton sur lequel vous cliquez. Après avoir passé la valeur, les nombres ou les opérateurs sont stockés dans la variable calcValue . Avant de stocker la valeur ou l'opérateur dans la variable calcValue , vous devez le convertir en type chaîne à l'aide de la méthode str() .

 def addToEq(x):
calcValue = calcValue + str(x)
numericEq.set(calcValue)

2. Calculer les boutons

Le bouton avec l'étiquette cal calcule la chaîne entière stockée dans la variable calcValue . La fonction eval() permet d'effectuer des opérations arithmétiques sur la variable calcValue et de renvoyer le total. Après avoir récupéré la valeur, définissez la valeur totale dans la variable numericEq . La variable numericEq affiche cette valeur dans la zone Entrée .

 def calculateEq():
total = str(eval(calcValue))
numericEq.set(total)

3. Bouton Effacer

Le bouton clear efface la boîte d' entrée. En cliquant sur le bouton effacer , la méthode clearInput() est appelée. La variable calcValue est définie sur une chaîne vide et elle est stockée dans la zone de saisie .

 def clearInput():
calcValue = ""
numericEq.set("")

Une fois que vous avez implémenté toutes ces méthodes, la sortie du code ressemble à ceci :

Les projets sont le meilleur moyen d'améliorer vos compétences en codage

Maintenant que vous avez appris à créer une calculatrice simple à l'aide de l'interface graphique dans Python Tkinter, il est temps pour vous d'explorer d'autres packages Python. Python propose une variété de packages qui vous aident à créer toute application que vous pouvez imaginer.

Comme vous le savez probablement déjà, les projets sont le meilleur moyen de mettre en valeur vos compétences. Des projets de construction vous aideront à acquérir une bonne maîtrise de la langue et à construire votre CV.