2016-05-18 2 views
0

Je dois utiliser une entrée d'une interface graphique dans une équation, et j'obtiens systématiquement des erreurs lorsque je tente de la convertir en nombre entier. La variable que je tente de convertir est marquée comme "rayon".Comment convertir une entrée tkinter en nombre entier

import math 
import tkinter as tk 

circ = tk.Tk() 
circ.title("Circle") 
circ.geometry("150x75") 

radiusLabel = tk.Label(circ, text = "What is the radius?") 
radiusEntry = tk.Entry(circ) 

def close_window(): 
    circ.destroy() 

radius = int(radiusEntry) 

submit = tk.Button(circ, text = "Submit", command = close_window) 

radiusLabel.pack() 
radiusEntry.pack() 
submit.pack() 
circ.mainloop() 

class Shape(): 
    def __init__(self, radius): 
     self.circumference = float(2) * float(radius) * float(math.pi) 
     self.area = float(math.pi) * float(radius*radius) 

    def getArea(self): 
     return self.area 

    def getPerimeter(self): 
     return self.circumference 

    def __str__(self): 
     return "Area: %s, Circumference: %s" % (self.area, self.circumference) 

circle = Shape(radius) 
print(circle) 
+1

Vous pouvez essayer 'rayon = int (radiusEntry.get())', mais il ne va pas travailler tout de suite. C'est parce que cette ligne est en train d'exécuter un millionième de seconde après la création de la fenêtre, donc l'utilisateur n'a probablement pas encore entré quelque chose dans la zone de texte. – Kevin

+0

Quelle est l'erreur? –

Répondre

0

Trois choses qui vous aideront avec ceci:

  1. conseil général: lors du débogage des choses comme cela, utiliser des instructions d'impression pour voir si vous obtenez les informations que vous vous attendez. Est-ce que radiusEntry vous donne toujours un numéro? Ma conjecture n'est probablement pas.

  2. Je crois que vous devriez utiliser radius = int(radiusEntry.get()) pour obtenir la valeur d'entrée

  3. probablement votre meilleur pari est d'effectuer une vérification avant que vous lancez le rayon d'un entier, et en vous assurant que vous essayez réellement de convertir un numéro. Si vous essayez de convertir une lettre ou un type de données None, cela peut être à l'origine de votre erreur. Vous pouvez vérifier cela en utilisant la méthode python isnumeric() pour les chaînes.

pseudocode pour vous:

If the radius entry is a number, 

    convert the radius entry to an int 
+0

Le problème est que le code ne le convertira pas. J'ai essayé int (rayonEntry) int (rayonEntry.get()) et beaucoup plus. J'essaie de comprendre quelle méthode convertira la chaîne de l'entrée en entier – KR1DL1