Domanda

Sto tentando per un compito a casa per attuare Simon dice a Python.Sto cercando di farlo usando la libreria della tartaruga (un requisito).

Tuttavia, ho incontrato un blocco inciampante in questo mentre posso ottenere lo schermo per registrarti fare clic su Eventi (attualmente stampando le coordinate X, y) Non riesco a doverlo attendere per un evento click.

.

In particolare quello che sto pensando di fare è avere aree sullo schermo che quando scavano all'interno di quella posizione è considerata come se avessero fatto clic su un pulsante.Schermo cancella e il gioco fa qualsiasi cosa.

Tuttavia, negli esperimenti nel tentativo di ottenere un "pulsante" funzionante tutto ciò che lo fa è impostato in modo che stampa le coordinate X, y, ma il resto del programma termina.Non ho aspettato che l'utente farebbe clic su nulla.Ho provato un metodo di blocco di ...

while clicked == False:
    pass
.

o

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

Ma entrambi i metodi appendono il programma fino a quando non interromperò manualmente e poi stampa i clic.

Sono mancato un'opzione da qualche parte?

È stato utile?

Soluzione 2

Quindi dopo una ricerca estesa non è necessaria necessariamente un modo di mettere in pausa l'esecuzione del codice in Python mentre si utilizza la tartaruga per attendere qualche evento di click.Forse in TK potrei farlo ma non a Turtle.

Tuttavia, c'è un modo per aggirarlo.Come esempio.Un metodo imposta il pulsante falso sullo schermo, imposta l'evento Click e termina.L'evento Fare clic quando si fa clic sulle chiamate il metodo successivo necessario per l'esecuzione.Quindi finché il pulsante non si fa clic sul codice effettivo non sta facendo nulla ma rimane in memoria per l'uso.

così in modo più specifico. 1. Creare un "pulsante". 2. Amare il tuo programma normalmente finché non ha bisogno di attendere un evento di click. 3. Impostare il clic sullo schermo Fare clic (o sulla tartaruga) in un modo in cui si fa clic sul pulsante "Pulsante" La parte successiva del codice è eseguita.

Nota speciale.Il codice in questione non può dipendere dall'attesa per un evento di clic per successivamente in codice.Invece, il clicca la parte successiva dell'esecuzione del tuo codice.

Altri suggerimenti

Le tartarughe non hanno pulsanti, ma hanno callback per click. Inoltre, è necessario utilizzare onclick per Screen per rilevare i clic generali e onclick per turtle per rilevare facendo clic su Turtle.Puoi, ad esempio, creare una 4 grande tartarughe con colori diversi utilizzando una forma dinamica.

Inoltre, la tartaruga è basata su TK, quindi devi essere a conoscenza di cose come mainloop()

Il seguente programma fornisce alcuni suggerimenti per 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()
.

È possibile effettuare la funzione registrata con OnClick () test della posizione X, Y.Se è all'interno di qualche regione, fai tutto il necessario.

Non vedo la differenza tra ciò che vuoi fare e cosa fa questo codice, la modifica della posizione della tartaruga è solo un esempio, puoi fare qualsiasi cosa quando un clic è catturato da onclick (), avviare persino un threadSe ne hai davvero bisogno (usando Creare discussioni in 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()
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top