Problème Python

Fermé
funbad9 Messages postés 1 Date d'inscription dimanche 26 avril 2020 Statut Membre Dernière intervention 26 avril 2020 - Modifié le 26 avril 2020 à 17:45
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 15 mai 2020 à 10:42
Bonjour,
Je commence à peine Python et je vient de créer mon premier programme. Il consiste a calculer combien de jours, minutes et secondes une personne a vécu.
Cependant, je rencontre une difficulté, quand j'exécute le programme, cela m'affiche -TypeError: unsupported operand type(s) for *: 'Entry' and 'int'- et je ne sais pas comment résoudre ce problème...
Pouvez-vous m'aider
merci :)

from tkinter import *

def valider():
    days['text'] = champAge*365
    minutes['text'] = champAge*525948
    seconds['text'] = chamAge*31556926
   
fenetre = Tk()
fenetre.title('How long have you lived')
fenetre.geometry('500x300')

label0 = Label(fenetre, text="Hey ! Let's see how long you have lived in days, minutes and seconds!", bg='yellow', relief=GROOVE)
label0.pack()

lblNom = Label(fenetre, text="Quel est votre nom", bg='pink', relief=GROOVE)
lblNom.pack()
champNom = Entry(fenetre)
champNom.pack()



lblAge = Label(fenetre, text= 'now enter your age', bg='pink', relief=GROOVE)
lblAge.pack()
champAge = Entry(fenetre)
champAge.pack()



bouton = Button(fenetre, text='Valider', bg= 'blue', relief=GROOVE, command=valider)
bouton.pack()


days = Label(fenetre, bg='bisque', relief=GROOVE, text="Résultat.....")
days.pack()

minutes = Label(fenetre, bg='bisque', relief=GROOVE, text="Résultat.....")
minutes.pack()

seconds = Label(fenetre, bg='bisque', relief=GROOVE, text="Résultat.....")
seconds.pack()


frame1 = Frame(fenetre, width=200, height=200, bg='bisque', relief=GROOVE)
frame1.pack()
frame1.pack_propagate(False)

fenetre.mainloop()

7 réponses

Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 27 avril 2020 à 12:12
Bonjour funbad9,

Effectivement, tu débutes ...

Est-ce que tu réalise que champAge est un objet qui représente un widget Entry de ton interface et non pas la valeur entrée ?

Donc on ne peut pas multiplier cet objet par un entier : days['text'] = champAge*365
C'est comme si on multipliait une carotte par un chou-fleur !

Il faut plutôt apprendre à récupérer le texte de l'Entry, le lien vers un doc Python et Tkinter sympa:

https://www.inforef.be/swi/download/apprendre_python3.pdf

Je te proposerais bien de regarder vers la bibliothèque datetime qui gère directement les dates et heures, pour raccourcir un peu ton code, mais commence déjà par faire tourner ce que tu as fait, pour commencer petit à petit ...

Au fait, dans ton interface, la moitié des textes est en français et l'autre en anglais
1
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 2 mai 2020 à 14:01
Et pourtant, je t'ai donné un lien vers une doc qui explique tout ça … :-)


on définit un widget Entry sur l'interface graphique:

age_entree = Entry(fenetre) : age_entree n'est que le nom de la boite de saisie Entry

et ensuite, dans la fonction valider(), on récupère le texte entré avec la méthode qui va bien

texte_entre = age_entree.methode_qui_va_bien()

jours= float(texte_entre) * 365.25 (dans une année il y a 365 jours 1/4)


Ensuite, si tu veux afficher jours dans le Label nommé days, il ne suffit pas d'écrire

days['text'] = jours

Là encore il y a une méthode qui s'appelle config() pour remplir le Label ...

Regarde vers la page 116 de la doc ....
1
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
2 mai 2020 à 12:51
Bonjour FunBad9,

Alors, as-tu trouvé quelque chose ? :-)
0
Bonjour
J'ai essayé quelques trucs mais je n'ai pas encore trouvé la solution...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci beaucoup, je pense que ça pourrait m'aider :)
(Désolé je n'avais pas vu ta première réponse)
Merci
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
9 mai 2020 à 11:49
Hello FunBad9,

As-tu trouvé comment faire ?
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
15 mai 2020 à 10:42
def valider():
    t = champAge.get()
    days['text'] = float(t)*365.25
0