Convertisseur decimal-binaire-hexadecimal (interface tkinter)

Soyez le premier à donner votre avis sur cette source.

Vue 37 878 fois - Téléchargée 1 626 fois

Description

Ce programme permet comme son nom l'indique de convertir des nombres (entiers) entre ces 3 bases. Toujours utilise pour vérifier les calculs faits "à la main" pour réviser les cours ^^. Petit programme sans prétention fait en 3/4 d'heure.

Source / Exemple :


##############################
# Convertisseur Multi-bases  #
# par Drvolodimtank          #
##############################

#### Importation des modules ####
from Tkinter import *

#################################
#### Fonctions de conversion ####
#################################
listehexa=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]
listebinaire=["0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"]

def binairedecimal(string):
    x=len(string)-1
    n=0
    res=0
    while x!=-1:
        if string[x]=="1":
            res=res+2**n
        n=n+1
        x=x-1
    return res

def decimalbinaire(string):
    quotient=int(string)
    liste=[]
    res=""
    while quotient!=1:
        liste=liste+[quotient%2]
        quotient=quotient/2
    liste=liste+[1]
    while liste!=[]:
        res=res+str(liste[-1])
        liste=liste[:-1]
    return res

def binairehexa(string):
    liste=[]
    res=""
    while len(string)>4:
        liste=liste+[string[-4:]]
        string=string[:-4]
    liste=liste+[string]
    while len(liste[-1])!=4:
        liste[-1]="0"+liste[-1]
    for x in range(len(liste)):
        i=listebinaire.index(liste[x])
        liste[x]=listehexa[i]
    while liste!=[]:
        res=res+liste[-1]
        liste=liste[:-1]
    return res

def hexabinaire(string):
    res=""
    for x in range(len(string)):
        i=listehexa.index(string[x])
        res=res+listebinaire[i]
    return res

def decimalhexa(string):
    return binairehexa(decimalbinaire(string))

def hexadecimal(string):
    return binairedecimal(hexabinaire(string))

#############################
#### Interface graphique ####
#############################

def convertir():
    saisie=Esaisie.get()
    x,y=basedepart.get(),basearrivee.get()
    couple=(x,y)
    if couple==(1,2):
        res=decimalbinaire(saisie)
    elif couple==(1,3):
        res=decimalhexa(saisie)
    elif couple==(2,1):
        res=binairedecimal(saisie)
    elif couple==(2,3):
        res=binairehexa(saisie)
    elif couple==(3,1):
        res=hexadecimal(saisie)
    elif couple==(3,2):
        res=hexabinaire(saisie)
    else :
        res="Euh..... B00lay ??"
    fen2=Toplevel()
    Label(fen2,text="Resultat").pack()
    Label(fen2,text=res).pack()
    fen2.mainloop()

fen=Tk()
fen.title("Convertisseur Multi-Bases")
Label(fen,text="Saisissez la valeur\na convertir").pack(side=TOP)
Esaisie=Entry(fen)
Esaisie.pack(side=TOP)

Fgauche=Frame(fen)
Fgauche.pack(side=LEFT)
Label(Fgauche,text="Base de depart").pack()
basedepart=IntVar()
Radiobutton(Fgauche,text="Decimal",variable=basedepart,value=1,indicatoron=0,width=15).pack()
Radiobutton(Fgauche,text="Binaire",variable=basedepart,value=2,indicatoron=0,width=15).pack()
Radiobutton(Fgauche,text="Hexadecimal",variable=basedepart,value=3,indicatoron=0,width=15).pack()

Fdroite=Frame(fen)
Fdroite.pack(side=RIGHT)
Label(Fdroite,text="Base d'arrivee").pack()
basearrivee=IntVar()
Radiobutton(Fdroite,text="Decimal",variable=basearrivee,value=1,indicatoron=0,width=15).pack()
Radiobutton(Fdroite,text="Binaire",variable=basearrivee,value=2,indicatoron=0,width=15).pack()
Radiobutton(Fdroite,text="Hexadecimal",variable=basearrivee,value=3,indicatoron=0,width=15).pack()

Bconvertir=Button(fen,text="Convertir",command=convertir)
Bconvertir.pack(side=BOTTOM)

fen.mainloop()

Codes Sources

A voir également

Ajouter un commentaire Commentaires
acetone333 Messages postés 1 Date d'inscription lundi 29 décembre 2014 Statut Membre Dernière intervention 29 décembre 2014
29 déc. 2014 à 11:39
J'ouvre le fichier téléchargé sur python, mais il ne fonctionne pas pour autant.. A quoi cela est ce du ? Une erreur dans l'algo ? Un problème de mise a jour de mon logiciel python ?
drvolodimtank Messages postés 2 Date d'inscription jeudi 14 juin 2007 Statut Membre Dernière intervention 13 juillet 2007
13 juil. 2007 à 09:56
Effectivement Epsilon012 je n'ai pas testé rigoureusement mon programme. Par contre 90% de CPU c'est un petit CPU que tu as ^^ il ne me prend que 5 10 % quand il bug !
Epsilon012 Messages postés 3 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 12 juillet 2007
12 juil. 2007 à 18:38
Quand je lui demande de convertir 0 il bug et utilise 90% du CPU :p
J'avoue c'est con de lui demandé ca mais bon je le teste ^^ :)
drvolodimtank Messages postés 2 Date d'inscription jeudi 14 juin 2007 Statut Membre Dernière intervention 13 juillet 2007
15 juin 2007 à 09:33
Le bouton quitter n'a pas été ajouté volontairement car lorsque l'application est lancée par doublie clique sur le fichier .py (sous windows) un clique sur la croix de fermeture quitte tout normalement.
Mais effectivement on peut rajouter simplement un bouton ;).
killer_sam Messages postés 2 Date d'inscription samedi 24 février 2007 Statut Membre Dernière intervention 14 juin 2007
14 juin 2007 à 18:50
Bonjour,

Pas mal comme petite application. Si je peux me permettre, je propose un bouton supplémentaire pour quitter.

CODE :

Radiobutton(Fdroite,text="Decimal",variable=basearrivee,value=1,indicatoron=0,width=15).pack()
Radiobutton(Fdroite,text="Binaire",variable=basearrivee,value=2,indicatoron=0,width=15).pack()
Radiobutton(Fdroite,text="Hexadecimal",variable=basearrivee,value=3,indicatoron=0,width=15).pack()

Bconvertir=Button(fen,text="Convertir",command=convertir)
Bconvertir.pack(side=BOTTOM)

Bexit=Button(fen,text='EXIT',fg ='red',command=fen.quit) # ligne ajoutée
Bexit.pack(side=BOTTOM) # ligne ajoutée

fen.mainloop()

Le bouton se place juste au dessus de "Convertir" et la police est en rouge (fg='red').
Tant que tu es sous IDLE il ne faut pas tuer à chaque fois le shell.

killer_sam

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.