2017-07-03 5 views
0

En vous référant à John Zelle's graphics.py, je souhaite que le GraphWin se ferme juste après que l'objet Circle a atteint le bord de la fenêtre et soit hors de vue.Fermer la fenêtre lorsque l'objet graphics.py a atteint le bord de la fenêtre

code suivant crée un cercle et le déplace:

win = GraphWin("My Circle", 100, 100) 
c = Circle(Point(50,50), 10) 
c.draw(win) 
    for i in range(40):  
     c.move(30, 0) #speed=30 
     time.sleep(1) 
     #c should move until the end of the windows(100), 
win.close() # then windows of title "My Circle" should close immediately 

Est-il possible de le faire au lieu d'utiliser range et compter le nombre exact des « étapes »?

Répondre

0

Comparez la position x du côté gauche du cercle sur le côté droit de la fenêtre:

from graphics import * 

WIDTH, HEIGHT = 300, 300 

RADIUS = 10 

SPEED = 30 

win = GraphWin("My Circle", WIDTH, HEIGHT) 

c = Circle(Point(50, 50), RADIUS) 

c.draw(win) 

while c.getCenter().x - RADIUS < WIDTH: 
    c.move(SPEED, 0) 
    time.sleep(1) 

win.close() # then windows of title "My Circle" should close immediately 

Dans une boucle plus rapide, nous pourrions déplacer RADIUS de l'autre côté de l'équation et de faire une nouvelle constante de WIDTH + RADIUS.

Si elle était un objet image, comment suggérez-vous pour obtenir la position extrême gauche de l'objet de la comparer à la largeur de la fenêtre?

Un objet Image fonctionnerait de même, en utilisant son ancre, au lieu du centre, et en utilisant sa largeur au lieu de son rayon:

from graphics import * 

WIDTH, HEIGHT = 300, 300 

SPEED = 30 

win = GraphWin("My Image", WIDTH, HEIGHT) 

image = Image(Point(50, 50), "file.gif") 

image.draw(win) 

image_half_width = image.getWidth()/2 

while image.getAnchor().x - image_half_width < WIDTH: 
    image.move(SPEED, 0) 
    time.sleep(1) 

win.close() # the window of title "My Image" should close immediately 
+0

peut vous expliquer en forme mot qu'est-ce que cette ligne de code faire? 'Tout c.getCenter() x - RADIUS

+0

@KimSuYu, sous forme de mot « , tandis que le bord gauche du cercle (centre de cercle de la position x de moins de rayon de cercle) est à la gauche de bord droit de la fenêtre (WIDTH), faites ce qui suit: ", où" le suivant "est" déplace le cercle vers la droite par unités de VITESSE, puis dors une seconde avant de continuer. " – cdlane

+0

puis en supposant qu'un objet 'Image' est utilisé plutôt qu'un objet' Circle'. 'getAnchor()' fonctionnera-t-il de la même manière que 'getCenter()'? Si c'était un objet 'Image', comment suggéreriez-vous d'obtenir la position la plus à gauche de l'objet pour la comparer à la largeur de la fenêtre? –