J'ai ce code, lequel dans l'essence crée une calculatrice. La calculatrice est basée sur la fonction EVAL () pour évaluer l'entrée dans le champ de texte. la fonction Exec () fournit exactement la même erreur, p> typeError: eval () arg 1 doit être une chaîne, des octets ou un objet de code P> < P> Toute aide est appréciée, merci! p> p>
5 Réponses :
Le problème avec votre code est que vous transmettez le widget texte lui-même et non sa valeur à Eval. Vous devez utiliser la méthode .get () code> pour prendre la valeur à partir de votre widget texte et utilisez uniquement l'utilisation
.eval () code> à ce sujet. P>
Comme l'indique l'exception,
evaluate = eval(text.get("1.0", tk.END))
Vous avez besoin Pour obtenir le texte affiché dans le texte code> objet code> à l'aide de texte code> est un objet code> objet code>, pas une chaîne, vous ne pouvez donc pas passer directement que sur
eval code>.
obtenir code>, puis transmettez-le sur
eval code> p>
Ceci est parce que votre code> code> dans votre fonction EVAL est votre widget texte, ce que vous voulez est en réalité l'entrée dans ce widget. Au lieu de La première partie, texte code>, vous pouvez essayer avec
text.get ("1.0", "fin-1c") code>. P>.
1.0 code> signifie que l'entrée doit être lue de la ligne une, du caractère zéro. Le
fin-1c code> signifie lire jusqu'à atteindre la fin de la zone de texte, sans le dernier caractère qui est un caractère de ligne de rupture. P>
C'est parce que dans eval () code> Vous passez l'instance de
tkinter.text code> classe. Je pense que vous souhaitez transmettre le contenu de la zone de texte, vous obtenez le contenu comme celui-ci
text.get (1.0, "fin-1c") code> qui vous retournera de contenu dans la chaîne afin que vous puissiez faire
Évaluez = EVAL (TEXT.GET (1.0, "END-1C")) CODE> P>