Python : Traduire la chaine

Résolu/Fermé
Guolt - 16 avril 2005 à 16:20
 Guolt - 19 avril 2005 à 18:02
Bonjour, jai un petit problème :

Voici le code :

from Tkinter import *
from math import *

#Définition

def calculer(event):
txt2.configure(text = "Résultat =" + int(str(entr1.get()) * 4 ))



#-------------------------Programme Principal-----------------------#

fen1 = Tk()
fen1.title = "Convertion des moles"

#Listing des objets

txt1 = Label(fen1, text = 'Entrez une valeur :')
txt2 = Label(fen1)
entr1 = Entry(fen1)
button1 = Button(fen1, text='Quitter', command =fen1.quit)

#Mise en place

txt1.grid(row=0, column =1)
entr1.grid(row =0, column =2)
entr1.bind("<Return>",calculer)
txt2.grid(row=2, column =1)
button1.grid(row=2, column =2)

fen1.mainloop()

Je voudrais que si je tapes 4 dans le champ, le programme ecrirai alors 16 (4*4) et non pas 4444

Quelqu'un a t-il la solution, ce code ci dessus est faux puisque une erreur me dit que int et str sont incompatibles.

Merci de votre aide !

1 réponse

Voici un listing qui fonctionne....

Tu as besoin d'une variable pour récupérer le contenu de ton objet Entry...
Tkinter met à ta disposition des objets spéciaux pour effectuer ce travail.
Il existe un objet IntVar() capable de retenir un contenu sous forme de nombre (entier et autres...) et un objet StringVar() capable de retenir des chaînes de caractères.

Tu accèdes à leur contenu à l'aide de la méthode get() et tu peux modifer leur contenu à l'aide de la méthode set().

Dans ton cas, tu dois instancier une variableTkinter et puis l'associer avec ton Entry...

Si tu as d'autres questions... je reste à ton service... ;-)


from Tkinter import *
from math import *

#Définition

def calculer(event):
    txt2.configure(text = "Résultat =" + str(blabla.get() * 4 ))

#-------------------------Programme Principal-----------------------#

fen1 = Tk()
fen1.title = "Convertion des moles"

#Listing des objets

txt1 = Label(fen1, text = 'Entrez une valeur :')
txt2 = Label(fen1)
blabla = IntVar()
entr1 = Entry(fen1, textvariable=blabla)
button1 = Button(fen1, text='Quitter', command =fen1.quit)

#Mise en place

txt1.grid(row=0, column =1)
entr1.grid(row =0, column =2)
entr1.bind("<Return>",calculer)
txt2.grid(row=2, column =1)
button1.grid(row=2, column =2)

fen1.mainloop() 
0
Lol Tarpan je sais, mais ici str(bla)*4 m'affichera blablablabla

Or l'entrée est un nombre, et je n'ai pas envie kil m'affiche 4444 au lieau de 12.

J'ai trouvé la solution :

txt2.configure(text = "Résultat =" + str(int(entr1.get()))) et voilà !

Pas besoin de déclarer de variables !

Surtout pas de textvariable ki alourdit le code (surtout que la variable, on l'entre dans la fenetre et non dans la source ! )

Voilà ! Bref jte remercie comme même (au fait je n'ai pas vraiment uitilisé int() mais float() car je devais traduire des opération de type 12e+22 13e-2 etc...)

Tiens je te donne le code, il pourra te servir ! (qui sait ?) :

from Tkinter import *
from math import *

#Définition

def calculer():
    txt5.configure(text = "Résultat =" + str((6.67e-11)*(float(entr1.get()))*(float(entr2.get()))/((float(entr3.get()))**2)))


    
#Programme Principal

fen1 = Tk()
fen1.title("Calcul de la Force d'Interaction Gravitationelle")
fen1.geometry('500x300')

#Listing des objets

txt1 = Label(fen1, text = "Entrez ici la Masse de l'élément A (kg) :")
txt2 = Label(fen1, text = "Entrez ici la Masse de l'élément B (kg) :")
txt3 = Label(fen1, text = "Entrez ici la distance entre A et B (m) :")
txt4 = Label(fen1, text = " ")
txt5 = Label(fen1)
entr1 = Entry(fen1)
entr2 = Entry(fen1)
entr3 = Entry(fen1)
button1 = Button(fen1, text='Quitter', command =fen1.quit)
button2 = Button(fen1, text='Calculer', command =calculer)

#Mise en place

txt1.grid(row=1, sticky=E)
txt2.grid(row=2, sticky=E)
txt3.grid(row=3, sticky=E)
txt4.grid(row=4, sticky=E)
txt5.grid(row=4, column =3)
entr1.grid(row=1, column =3)
entr2.grid(row=2, column =3)
entr3.grid(row=3, column =3)
button1.grid(row=5, column =1)
button2.grid(row=5, column =3)


fen1.mainloop()



0
Tarpan > Guolt
19 avril 2005 à 17:07
Hello Guolt....

En effet, autant pour moi... mais IntVar() doit être remplacé par DoubleVar() pour que tu puisses utiliser des nombres à virgules flottantes.

Mon code fonctionne très bien...
Mais je peux remarquer que le tien fonctionne aussi... :-D

A chacun son truc... :-p
0
Guolt > Tarpan
19 avril 2005 à 18:02
Bien sûr et c'est ce qui est attrayant chez python ! remarque que ce petit truc en python, c'est 2 pages en C ! lol
0