Calculatrice simpliciste sous tkinter

Soyez le premier à donner votre avis sur cette source.

Vue 18 200 fois - Téléchargée 1 376 fois

Description

Simple calculatrice permettant, addition,soustraction,multiplication et division de plusieurs nombre avec ou sans virgule

Source / Exemple :


# -*- coding: cp1252 -*- 

from Tkinter import*
import Tkinter as Tk
from math import *

t,y,p,n=0,0,0,1

def nombre(x):
        global t,p,n
        if p==0:
                t=t*10+x
        else:
                t=t+x/(10**(n))
                n=n+1
        z.set(str(t))
        
def x0():
        nombre(0.)

def x1():
        nombre(1.)
        
def x2():
        nombre(2.)

                
def x3():
        nombre(3.)

def x4():
        nombre(4.)
        
def x5():
        nombre(5.)
        
def x6():
        nombre(6.)

def x7():
        nombre(7.)
        
def x8():
        nombre(8.)
        
def x9():
        nombre(9.)

def point():
        global p
        p = '.'

def aplus():
        global y,t1,t,p,n
        y,t1,p,n = '+',t,0,1
        t=0
                
def amoins():
        global y,t1,t,p,n
        y,t1,p,n = '-',t,0,1
        t=0
                        
def afois():
        global y,t1,t,p,n
        y ,t1,p,n= '*',t,0,1
        t=0

def adiv():
        global y,t1,t,p,n
        y,p,t1,n='/',0,t,1
        t=0
                        
def aegal():
        global t,t1,n,p
        v ,p= '=',0
        if y == '+':
                z.set(str((t1+t)))
                t=t1+t
        elif y== '-':
                z.set(str((t1-t)))
                t=t1-t
        elif y== '*':
                z.set(str((t1*t)))
                t=t1*t
        elif y=='/':
                if t==0:
                        z.set(str("Erreur, impossible"))
                else:
                        z.set(str((t1/t)))
                        t=t1/t
        t1,n=0,1

def clear():
        global t,t1,n,p,z,y
        t,t1,n=0,0,0
        p,y=0,0
        z.set(str('0'))
        

#-----Prog Principal-----#

fen = Tk.Tk()
fen.title('Calculatrice')

fra1 = Frame(fen)
fra1.grid(row=1,column=0)
Button(fra1, text = '9', command= x9).grid(row=2, column = 2, padx = 3, pady = 3)
Button(fra1, text = '8', command= x8).grid(row=2, column = 1, padx = 3, pady = 3)
Button(fra1, text = '7', command= x7).grid(row=2, column = 0, padx = 3, pady = 3)
Button(fra1, text = '6', command= x6).grid(row=3, column = 2, padx = 3, pady = 3)
Button(fra1, text = '5', command= x5).grid(row=3, column = 1, padx = 3, pady = 3)
Button(fra1, text = '4', command= x4).grid(row=3, column = 0, padx = 3, pady = 3)
Button(fra1, text = '3', command= x3).grid(row=4, column = 2, padx = 3, pady = 3)
Button(fra1, text = '2', command= x2).grid(row=4, column = 1, padx = 3, pady = 3)
Button(fra1, text = '1', command= x1).grid(row=4, column = 0, padx = 3, pady = 3)
Button(fra1, text = '0', command= x0).grid(row=5, column = 2, padx = 3, pady = 3)

z = StringVar()
entree=Entry(fen,textvariable=z)
entree.grid(row=0,column=0)
z.set("0.")

Button(fra1, text= '+', command = aplus).grid(row=2,column=5, padx = 3, pady = 3)
Button(fra1, text= '-', command = amoins).grid(row=3,column=5, padx = 3, pady = 3)
Button(fra1, text= '*', command = afois).grid(row=2,column=6, padx = 3, pady = 3)
Button(fra1, text= '/', command = adiv).grid(row=3,column=6, padx = 3, pady = 3)
Button(fra1, text= '.', command = point).grid(row=4,column=5, padx = 3, pady = 3)
Button(fra1, text= '=', command = aegal).grid(row=4,column=6, padx = 3, pady = 3)
Button(fra1, text= 'C', command = clear).grid(row=5, column=6, padx = 3, pady = 3)

Button(fen,text='Quitter',command = fen.destroy).grid(row=6,column=7)
fen.mainloop

Conclusion :


Code simple même si un peu trop lourd à mon goût, je pense que je l'allègerais et l'améliorerais quand j'aurais compris et appris l'utilité des classes.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

elnabo
Messages postés
28
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
2 mai 2016

Je n'ai pas mis spécialement de commentaire car pour moi chaque chose me parait très clair sans avoir besoin d'être spécialement explicité
xeolin
Messages postés
336
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
8 novembre 2011
1
ouai....

le même script peut tenir en 15 lignes.

fait une liste de bouton, une boucle qui crée les boutons, utilise lambda et tu n'as besoin que d'une fonction...
fait en 2 minutes :

from Tkinter import*
chain=""
def func(b):
global chain
if b=="C":chain="0"
elif b=="=":chain=eval(chain)
else : chain+=b
z.set(chain)

fen = Tk()
fen.title('Calculatrice')
a=""
i=1
j=1
for a in ["0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","=","C"]:
Button(fen,text = a, command=lambda b=a:func(b)).grid(column=i,row=j)
j+=1
if j==5:j,i=1,i+1
z = StringVar()
entree=Entry(fen,textvariable=z)
entree.grid(row=0)
z.set(chain)
Button(fen,text='Quitter',command = fen.quit).grid(row=1)
fen.mainloop()
xeolin
Messages postés
336
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
8 novembre 2011
1
ont peut même faire des puissances ou des racines carrés, en utilisant deux fois **, possible d'ajouter des parenthèses.
xeolin
Messages postés
336
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
8 novembre 2011
1
jette un coup d'oeuil : http://www.pythonfrance.com/codes/CALCULATRICE-INTRODUCTION-LAMBDA_50499.aspx

Et sache que tu n'es pas le premier à faire ce genre d'erreur.
aera group
Messages postés
390
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
8 novembre 2010
10
Comme nous l'a montré Xeolin Lambda est plus qu'une nécessitée c'est un outil important dans la programmation sous Python, surtout dans une volonté d'automatisation/compression pour la création d'interface Graphique.

De plus et c'est encore plus important voir grave , tu ne veuilles pas à "surveiller" les entrées de l'utilisateur.
Étant très mauvais en Maths j'ai pensé que l'on pouvais diviser par 0 et là a mon grand étonnement Python ma généré une erreur. De même quand j'ai tapé "sqdfsqfqsfqsdf" il semble que ca ait fait bugé ton programme.

Pour cette erreur ton programme vaut à peine 4, il serait profitable de trouver une simple solution (j'ai entendu parler d'un truc ....... ah comment ça s'appelle ?? À oui ca me revient ....... try voila !!! try/except mais c'est dur à utiliser euh attend ca fait un truc comme ca :

try:
blabla
blabla
blabla
except:
blabla en ca d'erreur)
Et cela on ajoute le fait qu'il en existe environ 15 versions sur ce site plus une dans celle du livre de G.S. on peut se demander où est l'utilité (Ca me rappelle une histoire de vélo avec PythonLin :p). Ton défit serais peut être de "grandir un peu" (ce n'est pas de moi - comprend devenir plus expert en Python) et de nous faire une calculette digne de ce nom ...

Pour moi ça vaut 3, la calculette de Windows vaut 20/10 et celle de G.S. vaut 5. À toi de trouver le juste milieu pour avoir 10 :p
Bon courage mais je doute que les classes puisse résoudre tous ses problèmes, penses plutôt ergonomie et contrôle ca t'aidera.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.