Convertisseur decimal-binaire-hexadecimal (interface tkinter)

Soyez le premier à donner votre avis sur cette source.

Vue 24 164 fois - Téléchargée 1 088 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

killer_sam
Messages postés
2
Date d'inscription
samedi 24 février 2007
Statut
Membre
Dernière intervention
14 juin 2007
-
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
drvolodimtank
Messages postés
2
Date d'inscription
jeudi 14 juin 2007
Statut
Membre
Dernière intervention
13 juillet 2007
-
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 ;).
Epsilon012
Messages postés
3
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
12 juillet 2007
-
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
-
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 !
acetone333
Messages postés
1
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
29 décembre 2014
-
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 ?

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.