2014-04-23 3 views
0

Je veux écrire un programme Python qui montrera une lettre dans une fenêtre graphique. Si je clique sur le côté droit de la fenêtre, le texte doit devenir rouge et si je clique sur le côté gauche, il doit devenir vert. Il doit travailler au moins cinq fois. J'écris à la suite de ce changement de couleur seulement deux fois, puis me donne "graphics.GraphicsError: objet actuellement dessiné". Une idée de comment résoudre ce problème?Comment puis-je éviter l'erreur "Objet actuellement dessiné"?

from graphics import * 

def main(): 
    win= GraphWin("Name",400,400) 
    win.setCoords(0.0,0.0,4.0,4.0) 
    win.setBackground("white") 
    p=Text(Point(2.0,2.0),'B') 
    p.setSize(36) 
    for i in range(0,6): 
     c=win.getMouse() 
     s=c.getX() 

     if s>=2 : 

      p.setTextColor("Red") 
     else: 
      p.setTextColor("Green") 

     p.draw(win) 
main() 

Je suis nouveau à ce sujet. J'ai utilisé le module graphique zelle pour cela

+0

Vous pouvez essayer de tirer avant itérer est mis 'p.draw (victoire) 'avant la boucle for. Je n'ai pas essayé avec ma machine cependant. – korefn

+0

voici [exemple de code sur la façon de le faire en utilisant Tkinter] (https://gist.github.com/zed/11204815) – jfs

Répondre

0

Le problème est la position de l'appel p.draw(win) comme le suggère @korefn. Cependant, cette modification rend B visible avant le premier clic contrairement à votre code d'origine. J'ai inclus quelques commenté le code dans mon réusinage ci-dessous qui fera le « B » de la même couleur que l'arrière-plan jusqu'à ce que vous cliquez dessus:

from graphics import * 

def main(): 
    win = GraphWin('Mouse Test', 400, 400) 
    win.setCoords(0.0, 0.0, 4.0, 4.0) 

    anchorPoint = Point(2.0, 2.0) 

    text = Text(anchorPoint, 'B') 
    text.setSize(36) # maximum legal size 
    # text.setTextColor('white') # optional initial invisibility 
    text.draw(win) 

    for _ in range(6): 
     point = win.getMouse() 

     if point.getX() >= anchorPoint.getX(): 
      text.setTextColor('red') 
     else: 
      text.setTextColor('green') 

    win.close() 

main() 
Questions connexes