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?
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? –
pouvez-vous poster une mise à jour? – Stanton
Très bien, je l'ai mis à jour. –