0
from graphics import * 

def draw(): 
    returnStuff = {'again' : 0, '1st' : 1 } 

    draw.again = False 
    win = GraphWin("Quadrilateral Maker", 600, 600) 
    win.setBackground("yellow") 
    text = Text(Point(150, 15), 'Click 4 points to create a Quadrilateral') 
    text.draw(win) 

    #gets the 4 points 
    p1 = win.getMouse() 
    p1.draw(win) 
    p2 = win.getMouse() 
    p2.draw(win) 
    p3 = win.getMouse() 
    p3.draw(win) 
    p4 = win.getMouse() 
    p4.draw(win) 
    vertices = [p1, p2, p3, p4] 

    #draws the shape 
    quad = Polygon(vertices) 
    quad.setFill('red') 
    quad.setOutline('black') 
    quad.setWidth(3) 
    quad.draw(win) 

    text.setText('Click in the appropriate box.') 

    #Quit box 
    quitBox = Rectangle(Point(30, 500), Point(100,550)) 
    quitBox.setFill('green') 
    quitBox.draw(win) 
    quitorNah = Text(Point(60, 490), 'Quit') 
    quitorNah.draw(win) 

    #again box 
    quitBox = Rectangle(Point(480, 500), Point(550,550)) 
    quitBox.setFill('green') 
    quitBox.draw(win) 
    quitorNah = Text(Point(510, 490), 'Draw Again') 
    quitorNah.draw(win) 

    click = win.getMouse() 
    x = click.getX() 
    y = click.getY() 

    while True: 
     if 30 < x < 100 and 500 < y < 550: 
      returnStuff['again'] = 0 
      win.close() 
      break 


     elif 480 < x < 550 and 500 < y < 550: 
      returnStuff['again'] = 1 
      win.close() 
      break 

    return returnStuff 


count = 1 
returnValue = draw() 

if returnValue['1st'] == 1: 
    count = 0 

while count == 1 or returnValue['again'] == 1: 
    return_value = draw() 

J'ai donc ce simple programme interactif utilisant des graphiques Zelle, il demande à l'utilisateur de cliquer sur 4 points dans une fenêtre et de cela il crée une forme. Ensuite, l'utilisateur est montré 2 boîtes, une pour quitter et une pour dessiner à nouveau. Mon tirage à nouveau ne fonctionne pas, et cela a quelque chose à voir avec la valeur de retour. Je retourne un dictionnaire, car j'ai besoin d'accéder à 2 des variables de la fonction. Dans le dictionnaire 'returnStuff', j'ai une partie appelée 'again', qui est initialement définie sur 0. Si l'utilisateur clique dans la case run again, il change cette valeur à 1, puis en dehors de la fonction j'ai une instruction if cela devrait appeler à nouveau la fonction si cette valeur est à nouveau 1. Cela fait correctement la première fois, mais la deuxième fois autour de mon programme s'arrête tout ensemble, et je ne comprends pas pourquoi.Appel d'une fonction plusieurs fois avec la valeur de retour

Quelqu'un peut-il expliquer pourquoi cela se produit?

Répondre

0

Je pense que vous avez besoin d'un certain temps ...

while count==1 or returnValue['again'] == 1: 
    returnValue = draw() 
+0

bien j'ai changé la dernière instruction if au fond dans un certain temps, et puis s'ils cliquent sur le quit case i définir le « nouveau » à 0 Incase ils veulent quitter après avoir répété le programme une fois. Mais maintenant, il est infiniment en boucle, comme si je clique à nouveau dessiner une fois, il continuera à répéter quelle que soit l'option que je choisis? –

+0

pouvez-vous poster une mise à jour? – Stanton

+0

Très bien, je l'ai mis à jour. –