Pause dans programme pour faire une action

Pause dans programme pour faire une action - Python - Programmation

Marsh Posté le 28-12-2008 à 14:38:47    

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:
 
 

Code :
  1. from Tkinter import *
  2. def aeration(tap):
  3. neant = Canvas(tap, width =800, bg ='dark green')
  4. neant2 = Canvas(tap, width =800, bg ='dark green')
  5. neant.grid(row=0)
  6. neant2.grid(row=100)
  7. def boutonOK():
  8. n=int(nbrejoueur.get())
  9. listegens=[]
  10. tapis.destroy()
  11. tapis2 = Canvas(root, width =800, height =800, bg ='dark green')
  12. tapis2.pack(side = TOP, padx =0, pady =0)
  13. for i in xrange (1,n,1):
  14.  nomjoueur = StringVar()
  15.  potjoueur=IntVar()
  16.  def boutonOK2():
  17.   tapis2.destroy()
  18.   tapis3 = Canvas(root, width =800, height =800, bg ='dark green')
  19.   tapis3.pack(side = TOP, padx =0, pady =0)
  20.   joueur.nom=nomjoueur.get()
  21.   joueur.pot=potjoueur.get()
  22.  joueur= joueurs()
  23.  txtquestion=Label(tapis2,text='Rentrez les nom et pot du joueur n ' + str((i+1)) + ' puis appuyez sur Ok',fg='black',bg='dark green')
  24.  txtnomjoueur=Label(tapis2,text='le nom : ',fg='black',bg='dark green')
  25.  txtpotjoueur=Label(tapis2,text='le pot : ',fg='black',bg='dark green')
  26.  repondrepot = Entry(tapis2, textvariable=nomjoueur)
  27.  repondrenom = Entry(tapis2, textvariable=potjoueur)
  28.  bou1 = Button(tapis2,text='Ok',command=boutonOK2)
  29.  aeration(tapis2)
  30.  txtquestion.grid(row=1,column=2,columnspan =1)
  31.  txtnomjoueur.grid(row=2,column=1,sticky=E)
  32.  txtpotjoueur.grid(row=3,column=1,sticky=E)
  33.  repondrepot.grid(row=2,column=2)
  34.  repondrenom.grid(row=3,column=2)
  35.  bou1.grid(row=4,columnspan =1,column=2)
  36.                #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.
  37. root=Tk()
  38. tapis = Canvas(root, width =800, height =800, bg ='dark green')
  39. txtnbrejoueur=Label(tapis,text='Rentrez le nombre de participants puis appuyez sur Ok',fg='black',bg='dark green')
  40. nbrejoueur = Entry(tapis)
  41. bou1 = Button(tapis,text='Ok',command=boutonOK)
  42. aeration(tapis)
  43. txtnbrejoueur.grid(row=1)
  44. nbrejoueur.grid(row=2)
  45. bou1.grid(row=3)
  46. tapis.pack(side = TOP, padx =0, pady =0)


 
Note :
J'ai aussi essayé de mettre une boucle
 

Code :
  1. nonvalide=True
  2. while nonvalide:
  3.         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?
 
Merci d'avance.

Reply

Marsh Posté le 28-12-2008 à 14:38:47   

Reply

Marsh Posté le 28-12-2008 à 17:55:45    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed