Pause dans programme python pour actions

Résolu/Fermé
ptite fleur - 28 déc. 2008 à 12:38
 ptite fleur - 28 déc. 2008 à 17:55
Bonjour,
je suis en train de programmer une interface graphique avec Tkinter (en Python), et j'aimerai que le programme s'arrête le temps que l'utilisateur fasse une action (en particulier clique sur un bouton), puis recommence à partir de l'endroit où il s'était arrété.
J'ai essayé pas mal de choses (raw_input, time.pause en disant à l'utilisateur de se dépécher), mais toutes ces actions ne marchent pas parceque soit une fois que l'action est faite le programme ne revient pas où il s'était arrété, soit, dans le cas de time, on ne peut pas rentrer les paramètres : tout se gèle.
Si quelqu'un avait une solution, ça m'arrangerait bien.
Comme je ne suis pas sûr d'être très clair, je mets ci dessous le code avec l'endroit où je voudrais qu'il se mette en pause:


from Tkinter import *

def aeration(tap):
	neant = Canvas(tap, width =800, bg ='dark green')
	neant2 = Canvas(tap, width =800, bg ='dark green')
	neant.grid(row=0)
	neant2.grid(row=100)
def boutonOK():
	n=int(nbrejoueur.get())
	listegens=[]
	tapis.destroy()
	tapis2 = Canvas(root, width =800, height =800, bg ='dark green')
	tapis2.pack(side = TOP, padx =0, pady =0)
	for i in xrange (1,n,1):
		nomjoueur = StringVar()
		potjoueur=IntVar()
		def boutonOK2():
			tapis2.destroy()
			tapis3 = Canvas(root, width =800, height =800, bg ='dark green')
			tapis3.pack(side = TOP, padx =0, pady =0)
			joueur.nom=nomjoueur.get()
			joueur.pot=potjoueur.get()
		joueur= joueurs()
		txtquestion=Label(tapis2,text='Rentrez les nom et pot du joueur n ' + str((i+1)) + ' puis appuyez sur Ok',fg='black',bg='dark green')
		txtnomjoueur=Label(tapis2,text='le nom : ',fg='black',bg='dark green')
		txtpotjoueur=Label(tapis2,text='le pot : ',fg='black',bg='dark green')
		repondrepot = Entry(tapis2, textvariable=nomjoueur)
		repondrenom = Entry(tapis2, textvariable=potjoueur)
		bou1 = Button(tapis2,text='Ok',command=boutonOK2)
		aeration(tapis2)
		txtquestion.grid(row=1,column=2,columnspan =1)
		txtnomjoueur.grid(row=2,column=1,sticky=E)
		txtpotjoueur.grid(row=3,column=1,sticky=E)
		repondrepot.grid(row=2,column=2)
		repondrenom.grid(row=3,column=2)
		bou1.grid(row=4,columnspan =1,column=2)
               #la pause doit être ici pour que l'utilisateur clique sur le bouton OK,  que l'action boutonOK2 se réalise, et ensuite que la boucle reprenne à ce point.

root=Tk()

tapis = Canvas(root, width =800, height =800, bg ='dark green')


txtnbrejoueur=Label(tapis,text='Rentrez le nombre de participants puis appuyez sur Ok',fg='black',bg='dark green')

nbrejoueur = Entry(tapis)
bou1 = Button(tapis,text='Ok',command=boutonOK)

aeration(tapis)
txtnbrejoueur.grid(row=1)
nbrejoueur.grid(row=2)
bou1.grid(row=3)

tapis.pack(side = TOP, padx =0, pady =0)




Merci d'avance.

2 réponses

note: j'ai aussi essayé de mettre une boucle
nonvalide=True
while nonvalide:
        pass


avec nonvalide=False dans l'instruction boutonOK2, mais lorsque le compilateur va compiler, il va faire cette instruction avant toutes les autres! et donc, aucun graphisme n'apparit, et on ne peut pas cliquer sur ok. Est-ce que quelqu'un sait pourquoi?
0
c'est bon, j'ai finalement réussi à résoudre le problème.
Je note la solution au cas où qqun tomberait sur le même problème....

en fait il ne faut pas faire de boucle for, mais la remplacer par une fonction récursive qui imcrémente le i, et qui teste tant que i<n ...

à bientôt.
-1