Pregunta

Estoy intentando una asignación de tareas para implementar Simon dice en Python.Estoy tratando de hacerlo usando la biblioteca de tortugas (un requisito).

Sin embargo, me he encontrado con un obstáculo en ese momento, mientras puedo conseguir que la pantalla registre haga clic en Eventos (actualmente simplemente imprimiendo las coordenadas X, Y), no puedo esperar para esperar un evento de clics.

Específicamente lo que estoy planeando hacer es tener áreas en la pantalla que cuando hacen clic dentro de esa ubicación, se considera como si hubieran hecho clic con un botón.La pantalla se borra y el juego hace lo que sea.

Sin embargo, en experimentos al tratar de obtener un botón de trabajo ", todo lo que hace, lo establece, por lo que imprime las coordenadas X, Y pero el resto del programa termina.No esperó a que el usuario haga clic en nada.Probé un método de bloqueo de ...

while clicked == False:
    pass

o

while clicked == False:
    time.sleep(1)

Pero ambos métodos cuelgan el programa hasta que me interrumpan manualmente y luego imprimirá los clics.

¡Estoy perdiendo una opción en algún lugar?

¿Fue útil?

Solución 2

Entonces, después de una búsqueda extensa, no es necesariamente una forma de pausa en la ejecución del código en Python mientras usa Turtle para esperar algún evento de clic.Tal vez en Tk podría hacer eso, pero no en tortuga.

Sin embargo, hay una manera de moverse alrededor de eso.Como ejemplo.Un método configura el botón FAKE en la pantalla, configura el evento de clic y termina.El evento de clic cuando se hace clic en Llamadas al siguiente método necesario para la ejecución.Por lo tanto, hasta que se haga clic en el botón, el código real no está haciendo nada, pero permanece en la memoria para su uso.

más específicamente. 1. Crea un 'botón'. 2. Haga que su programa se comporte normalmente hasta que necesite esperar un evento de clic. 3. Configure el clic en Pantalla en pantalla (o en tortuga) de manera que se haga clic en el 'botón', se hace clic en la siguiente parte del código.

Nota especial.El código en cuestión no puede depender de esperar un evento de clic para más adelante en el código.En su lugar, el clic causa la siguiente parte de la ejecución de su código.

Otros consejos

Tortugas No tienen botones, pero tienen devoluciones de llamada por clics. Además, debe usar onclick para Screen para detectar clics generales y onclick para turtle para detectar clic en las tortugas.Puede, por ejemplo, hacer una 4 tortugas grandes con diferentes colores usando una forma dinámica.

Además, Turtle se basa en TK, por lo que debe ser consciente de las cosas como mainloop()

El siguiente programa da algunas sugerencias para Python 2.7.5.

import turtle as t
from random import randint

class MyTurtle(t.Turtle) :

    def __init__(self,**args) :
        t.Turtle.__init__(self,**args)

    def mygoto(self,x,y) :
        t1.goto(x,y)
        print x,y

    def randonics(self,x,y) :
        self.left(randint(90,270))

def minegoto(x,y) :
    print x,y
    t1.goto(x,y)

wt=t.Screen()
t1=MyTurtle()
wt.register_shape("big",((0,0),(30,0),(30,30),(0,30)))
t1.shape("big")
wt.onclick(t1.mygoto,btn=1)
wt.onclick(minegoto,btn=2)
t1.onclick(t1.randonics,btn=3)
t1.goto(100,100)

t.mainloop()

Puede realizar la función registrada con ONCLICK () Pruebe la posición X, Y.Si está dentro de alguna región, haces lo que debes.

No veo la diferencia entre lo que desea hacer y qué hace este código, la modificación de la posición de tortuga es solo un ejemplo, puede hacer cualquier cosa cuando se capture un clic por ONCLICK (), incluso inicie un hiloSi realmente lo necesita (usando creando hilos en Python )

import turtle as t
from random import randint
from threading import Thread
from time import sleep

def threaded_function(arg,t1):
    for i in range(arg):
        print "running",i
        sleep(1)
        t1.forward(i*10)



def minegoto(x,y) :
    print x,y
    t1.goto(x,y)
    thread = Thread(target = threaded_function, args = (10,t1 ))
    thread.start()
    thread.join()
    print "thread finished...exiting"

wt=t.Screen()
t1=t.Turtle()
wt.register_shape("big",((0,0),(30,0),(30,30),(0,30)))
t1.shape("big")
wt.onclick(minegoto,btn=1)
t1.goto(100,100)

t.mainloop()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top