Grazie per il suggerimento, ma ho provato e non va ancora bene... provo a spiegare da principio quello che devo fare. Devo creare una finestra a sfondo nero che rappresenta un pallino rosso. Questo pallino deve muoversi, compiendo un tragitto che va da un'estremità all'altra della finestra (si deve muovere da sinistra a destra).
Per creare la finestra e il pallino uso il seguente codice:
codice:
from Tkinter import *
top=Tk()
top.geometry("500x500")
can=Canvas(top,width=500,height=500,background="black")
can.pack()
span=10
x1=5
y1=50
x2=x1+span
y2=y1+span
can.create_oval(x1,y1,x2,y2,fill="red",outline="red")
A questo punto, ho bisogno che il pallino si muova. Dato che il pallino è rosso e lo sfondo è nero, non faccio altro che colorare di nero il pallino (che quindi sparisce), aumentrae x1 e x2 e creare un nuovo pallino rosso accanto al vecchio, ma con le nuove coordinate: in questo modo, sembrerà che il pallino si muova. Ecco il codice che avevo intenzione di usare:
codice:
pos=0
def run():
global x1,x2,start
can.create_oval(x1,y1,x2,y2,fill="black",outline="black")
x1=x1+span+1
x2=x2+span+1
can.create_oval(x1,y1,x2,y2,fill="red",outline="red")
while pos<=30:
top.after(500,func=run)
Timer(10,run)
pos=pos+1
Perché ciò funzioni, è necessario che ogni ciclo while, una volta interpretata l'istruzione top.after, si blocchi per 500 millisecondi. Dopo questo lasso di tempo, la funzione "run" aggiornerà la posizione del pallino, e il while dovrebbe riprendere a ciclare e lanciare nuovamente, dopo 500 msec, l'istruzione run, che aggiornerà nuovamente la posizione del pallino... e questo sinchè la variabile pos sarà minore o uguale a 30.
Il codice non funziona perchè nè after nè time.sleep sono in grado di bloccare per un determinato lasso di tempo il ciclo while. In Tcl/Tk questo era possibile grazie all'istruzione vwait.
Quello che sto realizzando è un esperimento di psicofisica, e in Phyton ci sono già librerie dedicate (psychopy e VisionEgg), che tra l'altro sono molto belle, ma purtroppo il movimento del pallino, fatto con le funzioni di questi pacchetti, non è come lo voglio io. In Tcl/Tk invece il movimento che riuscivo a ottenere era molto bello, ma purtroppo nè il while nè il for erano in grado ciclare a velocità costante: ne risultava che la velocità del pallino non era costante (una cosa impercettibile all'occhio umano, ma per me fondamentale!).