Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 12/05/2019, à 19:31

pingouinux

Re : |python tkinter novice]- aide pour programmer une machine a sous

@kholo #25 :
Ce que tu appelles mon script est celui de Nat62 que j'ai adapté.

L'élève de seconde aura du mal à faire croire à son prof qu'elle qu'elle n'a pas été aidée…

Hors ligne

#27 Le 12/05/2019, à 19:34

Nat62

Re : |python tkinter novice]- aide pour programmer une machine a sous

Recoucou
c'est trop gentil; merci beaucoup !

voilà mon programme que j'avais fait :
from tkinter import*

# On définit la fonction Démarrer. Elle va être appelée quand on va cliquer
# sur le bouton Go.
def Demarrer() :
    imag11=canvas.create_image(150,400,anchor=CENTER,image=image11)
    DeplacementImagColonne2(imag11,400)
    imag11=canvas.create_image(350,400,anchor=CENTER,image=image11)
    DeplacementImagColonne3(imag11,400)
    imag11=canvas.create_image(550,400,anchor=CENTER,image=image11)
    DeplacementImagColonne4(imag11,400)

fen=Tk()  # Création d'une fenêtre graphique avec le module tkinter
fen.title("Machine à sous")

canvas=Canvas(fen, width='700',height='700',background='black')
canvas.pack()

# Création de deux étoiles concentriques (l'un jaune et l'autre marron)
etoile1=canvas.create_polygon(350,15,317,75,250,75,301,123,280,190,350,150,
420,190,400,123,450,75,383,75,fill="yellow",outline='yellow')
etoile2=canvas.create_polygon(350,27,322,80,260,80,308,123,288,180,350,142,
412,180,393,123,440,80,378,80,fill="brown",outline='yellow')

# Création d'un rectangle de dimensions 400 sur 650; colorié en marron
# et le contour en noir.
colonne1=canvas.create_rectangle(25,250,675,650,fill="brown",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et
# 10 sur une même ligne
ligne1=canvas.create_oval(65,255,85,275,fill="yellow",outline='yellow')
ligne2=canvas.create_oval(110,260,120,270,fill="yellow",outline='yellow')
ligne3=canvas.create_oval(145,255,165,275,fill="yellow",outline='yellow')
ligne4=canvas.create_oval(190,260,200,270,fill="yellow",outline='yellow')
ligne5=canvas.create_oval(225,255,245,275,fill="yellow",outline='yellow')
ligne6=canvas.create_oval(270,260,280,270,fill="yellow",outline='yellow')
ligne7=canvas.create_oval(305,255,325,275,fill="yellow",outline='yellow')
ligne8=canvas.create_oval(350,260,360,270,fill="yellow",outline='yellow')
ligne9=canvas.create_oval(385,255,405,275,fill="yellow",outline='yellow')
ligne10=canvas.create_oval(430,260,440,270,fill="yellow",outline='yellow')
ligne11=canvas.create_oval(465,255,485,275,fill="yellow",outline='yellow')
ligne12=canvas.create_oval(510,260,520,270,fill="yellow",outline='yellow')
ligne13=canvas.create_oval(545,255,565,275,fill="yellow",outline='yellow')
ligne14=canvas.create_oval(590,260,600,270,fill="yellow",outline='yellow')
ligne15=canvas.create_oval(625,255,645,275,fill="yellow",outline='yellow')

# Création de trois rectangles de mêmes dimensions 300 sur 200;
# coloriés en blanc et leur contour en noir.
colonne2=canvas.create_rectangle(50,300,250,600,fill="white",outline="black")
colonne3=canvas.create_rectangle(250,300,450,600,fill="white",outline="black")
colonne4=canvas.create_rectangle(450,300,650,600,fill="white",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et
# 10 sur une même ligne
ligne16=canvas.create_oval(65,620,85,640,fill="yellow",outline='yellow')
ligne17=canvas.create_oval(110,625,120,635,fill="yellow",outline='yellow')
ligne18=canvas.create_oval(145,620,165,640,fill="yellow",outline='yellow')
ligne19=canvas.create_oval(190,625,200,635,fill="yellow",outline='yellow')
ligne20=canvas.create_oval(225,620,245,640,fill="yellow",outline='yellow')
ligne21=canvas.create_oval(270,625,280,635,fill="yellow",outline='yellow')
ligne22=canvas.create_oval(305,620,325,640,fill="yellow",outline='yellow')
ligne23=canvas.create_oval(350,625,360,635,fill="yellow",outline='yellow')
ligne24=canvas.create_oval(385,620,405,640,fill="yellow",outline='yellow')
ligne25=canvas.create_oval(430,625,440,635,fill="yellow",outline='yellow')
ligne26=canvas.create_oval(465,620,485,640,fill="yellow",outline='yellow')
ligne27=canvas.create_oval(510,625,520,635,fill="yellow",outline='yellow')
ligne28=canvas.create_oval(545,620,565,640,fill="yellow",outline='yellow')
ligne29=canvas.create_oval(590,625,600,635,fill="yellow",outline='yellow')
ligne30=canvas.create_oval(625,620,645,640,fill="yellow",outline='yellow')

# Création d'un bouton Go qui appelle la fonction Démarrer
boutonGo = Button(fen,text='Go',width=10,height=2,command=Demarrer)
boutonGo.place(x=310,y=90)

# On définit une fonction Déplacement pour la "colonne2" qui va faire défiler
# les images.
def DeplacementImagColonne2(imag,y):
    y=y+2
    canvas.move(imag,0,2)
    if y<500 :
       canvas.after(10,DeplacementImagColonne2,imag,y)
    else:
       canvas.delete(imag)
       y=400
       imag=canvas.create_image(150,400,anchor=CENTER,image=image22)
       y=y+2
       if y<500 :
          canvas.after(10,DeplacementImagColonne2,imag,y)
       else :
          canvas.delete(imag)
          y=400
          imag=canvas.create_image(150,400,anchor=CENTER,image=image33)
          y=y+2
          if y<500 :
             canvas.after(10,DeplacementImagColonne2,imag,y)
          else :
              canvas.delete(imag)
              y=400
              imag=canvas.create_image(150,400,anchor=CENTER,image=image44)
              y=y+2
              if y<500 :
                 canvas.after(10,DeplacementImagColonne2,imag,y)
              else :
                  canvas.delete(imag)
                  y=400
                  imag=canvas.create_image(150,400,anchor=CENTER,image=image55)
                  y=y+2
                  if y<500 :
                      canvas.after(10,DeplacementImagColonne2,imag,y)
                  else :
                      canvas.delete(imag)






# On définit une fonction Déplacement pour la "colonne3" qui va faire défiler
# les images.
def DeplacementImagColonne3(imag,y):
    y=y+2
    canvas.move(imag,0,2)
    if y<500 :
       canvas.after(7,DeplacementImagColonne3,imag,y)
    else:
       canvas.delete(imag)
       y=400
       imag=canvas.create_image(350,400,anchor=CENTER,image=image22)
       y=y+2
       if y<500 :
          canvas.after(7,DeplacementImagColonne3,imag,y)
       else :
          canvas.delete(imag)
          y=400
          imag=canvas.create_image(350,400,anchor=CENTER,image=image33)
          y=y+2
          if y<500 :
             canvas.after(7,DeplacementImagColonne3,imag,y)
          else :
              canvas.delete(imag)
              y=400
              imag=canvas.create_image(350,400,anchor=CENTER,image=image44)
              y=y+2
              if y<500 :
                 canvas.after(7,DeplacementImagColonne3,imag,y)
              else :
                  canvas.delete(imag)
                  y=400
                  imag=canvas.create_image(350,400,anchor=CENTER,image=image55)
                  y=y+2
                  if y<500 :
                      canvas.after(7,DeplacementImagColonne3,imag,y)
                  else :
                      canvas.delete(imag)

# On définit une fonction Déplacement pour la "colonne4" qui va faire défiler
# les images
def DeplacementImagColonne4(imag,y):
    y=y+2
    canvas.move(imag,0,2)
    if y<500 :
       canvas.after(5,DeplacementImagColonne4,imag,y)
    else:
       canvas.delete(imag)
       y=400
       imag=canvas.create_image(550,400,anchor=CENTER,image=image22)
       y=y+2
       if y<500 :
          canvas.after(5,DeplacementImagColonne4,imag,y)
       else :
          canvas.delete(imag)
          y=400
          imag=canvas.create_image(550,400,anchor=CENTER,image=image33)
          y=y+2
          if y<500 :
             canvas.after(50,DeplacementImagColonne4,imag,y)
          else :
              canvas.delete(imag)
              y=400
              imag=canvas.create_image(550,400,anchor=CENTER,image=image44)
              y=y+2
              if y<500 :
                 canvas.after(5,DeplacementImagColonne4,imag,y)
              else :
                  canvas.delete(imag)
                  y=400
                  imag=canvas.create_image(550,400,anchor=CENTER,image=image55)
                  y=y+2
                  if y<500 :
                      canvas.after(5,DeplacementImagColonne4,imag,y)
                  else :
                      canvas.delete(imag)

# Programme PRINCIPAL
y=float()   # On définit la variable y qui représente l'ordonnée du canvas.
image11=PhotoImage(file="cerises.gif") # On va chercher les images
image22=PhotoImage(file="seven.gif")
image33=PhotoImage(file="cloche.gif")
image44=PhotoImage(file="pasteque.gif")
image55=PhotoImage(file="feracheval.gif")

fen.mainloop() # Cela permet de faire tourner le script et de réceptionner
               # les instructions qui sont données dans le programme.

donc c'est dans la fonction DeplacementColonne2 : j'ai fait des if imbriqués mais ça ne fonctionne pas ! la cerise apparaît; le seven aussi et même ce seven défile tout le temps cad en boucle. J'aimerais comprendre pourquoi; ce qui se passe.
merci beaucoup et appétit !

Hors ligne

#28 Le 12/05/2019, à 19:36

Nat62

Re : |python tkinter novice]- aide pour programmer une machine a sous

Recoucou
c'est trop gentil; merci beaucoup !

voilà mon programme que j'avais fait :
from tkinter import*

# On définit la fonction Démarrer. Elle va être appelée quand on va cliquer
# sur le bouton Go.
def Demarrer() :
    imag11=canvas.create_image(150,400,anchor=CENTER,image=image11)
    DeplacementImagColonne2(imag11,400)
    imag11=canvas.create_image(350,400,anchor=CENTER,image=image11)
    DeplacementImagColonne3(imag11,400)
    imag11=canvas.create_image(550,400,anchor=CENTER,image=image11)
    DeplacementImagColonne4(imag11,400)

fen=Tk()  # Création d'une fenêtre graphique avec le module tkinter
fen.title("Machine à sous")

canvas=Canvas(fen, width='700',height='700',background='black')
canvas.pack()

# Création de deux étoiles concentriques (l'un jaune et l'autre marron)
etoile1=canvas.create_polygon(350,15,317,75,250,75,301,123,280,190,350,150,
420,190,400,123,450,75,383,75,fill="yellow",outline='yellow')
etoile2=canvas.create_polygon(350,27,322,80,260,80,308,123,288,180,350,142,
412,180,393,123,440,80,378,80,fill="brown",outline='yellow')

# Création d'un rectangle de dimensions 400 sur 650; colorié en marron
# et le contour en noir.
colonne1=canvas.create_rectangle(25,250,675,650,fill="brown",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et
# 10 sur une même ligne
ligne1=canvas.create_oval(65,255,85,275,fill="yellow",outline='yellow')
ligne2=canvas.create_oval(110,260,120,270,fill="yellow",outline='yellow')
ligne3=canvas.create_oval(145,255,165,275,fill="yellow",outline='yellow')
ligne4=canvas.create_oval(190,260,200,270,fill="yellow",outline='yellow')
ligne5=canvas.create_oval(225,255,245,275,fill="yellow",outline='yellow')
ligne6=canvas.create_oval(270,260,280,270,fill="yellow",outline='yellow')
ligne7=canvas.create_oval(305,255,325,275,fill="yellow",outline='yellow')
ligne8=canvas.create_oval(350,260,360,270,fill="yellow",outline='yellow')
ligne9=canvas.create_oval(385,255,405,275,fill="yellow",outline='yellow')
ligne10=canvas.create_oval(430,260,440,270,fill="yellow",outline='yellow')
ligne11=canvas.create_oval(465,255,485,275,fill="yellow",outline='yellow')
ligne12=canvas.create_oval(510,260,520,270,fill="yellow",outline='yellow')
ligne13=canvas.create_oval(545,255,565,275,fill="yellow",outline='yellow')
ligne14=canvas.create_oval(590,260,600,270,fill="yellow",outline='yellow')
ligne15=canvas.create_oval(625,255,645,275,fill="yellow",outline='yellow')

# Création de trois rectangles de mêmes dimensions 300 sur 200;
# coloriés en blanc et leur contour en noir.
colonne2=canvas.create_rectangle(50,300,250,600,fill="white",outline="black")
colonne3=canvas.create_rectangle(250,300,450,600,fill="white",outline="black")
colonne4=canvas.create_rectangle(450,300,650,600,fill="white",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et
# 10 sur une même ligne
ligne16=canvas.create_oval(65,620,85,640,fill="yellow",outline='yellow')
ligne17=canvas.create_oval(110,625,120,635,fill="yellow",outline='yellow')
ligne18=canvas.create_oval(145,620,165,640,fill="yellow",outline='yellow')
ligne19=canvas.create_oval(190,625,200,635,fill="yellow",outline='yellow')
ligne20=canvas.create_oval(225,620,245,640,fill="yellow",outline='yellow')
ligne21=canvas.create_oval(270,625,280,635,fill="yellow",outline='yellow')
ligne22=canvas.create_oval(305,620,325,640,fill="yellow",outline='yellow')
ligne23=canvas.create_oval(350,625,360,635,fill="yellow",outline='yellow')
ligne24=canvas.create_oval(385,620,405,640,fill="yellow",outline='yellow')
ligne25=canvas.create_oval(430,625,440,635,fill="yellow",outline='yellow')
ligne26=canvas.create_oval(465,620,485,640,fill="yellow",outline='yellow')
ligne27=canvas.create_oval(510,625,520,635,fill="yellow",outline='yellow')
ligne28=canvas.create_oval(545,620,565,640,fill="yellow",outline='yellow')
ligne29=canvas.create_oval(590,625,600,635,fill="yellow",outline='yellow')
ligne30=canvas.create_oval(625,620,645,640,fill="yellow",outline='yellow')

# Création d'un bouton Go qui appelle la fonction Démarrer
boutonGo = Button(fen,text='Go',width=10,height=2,command=Demarrer)
boutonGo.place(x=310,y=90)

# On définit une fonction Déplacement pour la "colonne2" qui va faire défiler
# les images.
def DeplacementImagColonne2(imag,y):
    y=y+2
    canvas.move(imag,0,2)
    if y<500 :
       canvas.after(10,DeplacementImagColonne2,imag,y)
    else:
       canvas.delete(imag)
       y=400
       imag=canvas.create_image(150,400,anchor=CENTER,image=image22)
       y=y+2
       if y<500 :
          canvas.after(10,DeplacementImagColonne2,imag,y)
       else :
          canvas.delete(imag)
          y=400
          imag=canvas.create_image(150,400,anchor=CENTER,image=image33)
          y=y+2
          if y<500 :
             canvas.after(10,DeplacementImagColonne2,imag,y)
          else :
              canvas.delete(imag)
              y=400
              imag=canvas.create_image(150,400,anchor=CENTER,image=image44)
              y=y+2
              if y<500 :
                 canvas.after(10,DeplacementImagColonne2,imag,y)
              else :
                  canvas.delete(imag)
                  y=400
                  imag=canvas.create_image(150,400,anchor=CENTER,image=image55)
                  y=y+2
                  if y<500 :
                      canvas.after(10,DeplacementImagColonne2,imag,y)
                  else :
                      canvas.delete(imag)






# On définit une fonction Déplacement pour la "colonne3" qui va faire défiler
# les images.
def DeplacementImagColonne3(imag,y):
    y=y+2
    canvas.move(imag,0,2)
    if y<500 :
       canvas.after(7,DeplacementImagColonne3,imag,y)
    else:
       canvas.delete(imag)
       y=400
       imag=canvas.create_image(350,400,anchor=CENTER,image=image22)
       y=y+2
       if y<500 :
          canvas.after(7,DeplacementImagColonne3,imag,y)
       else :
          canvas.delete(imag)
          y=400
          imag=canvas.create_image(350,400,anchor=CENTER,image=image33)
          y=y+2
          if y<500 :
             canvas.after(7,DeplacementImagColonne3,imag,y)
          else :
              canvas.delete(imag)
              y=400
              imag=canvas.create_image(350,400,anchor=CENTER,image=image44)
              y=y+2
              if y<500 :
                 canvas.after(7,DeplacementImagColonne3,imag,y)
              else :
                  canvas.delete(imag)
                  y=400
                  imag=canvas.create_image(350,400,anchor=CENTER,image=image55)
                  y=y+2
                  if y<500 :
                      canvas.after(7,DeplacementImagColonne3,imag,y)
                  else :
                      canvas.delete(imag)

# On définit une fonction Déplacement pour la "colonne4" qui va faire défiler
# les images
def DeplacementImagColonne4(imag,y):
    y=y+2
    canvas.move(imag,0,2)
    if y<500 :
       canvas.after(5,DeplacementImagColonne4,imag,y)
    else:
       canvas.delete(imag)
       y=400
       imag=canvas.create_image(550,400,anchor=CENTER,image=image22)
       y=y+2
       if y<500 :
          canvas.after(5,DeplacementImagColonne4,imag,y)
       else :
          canvas.delete(imag)
          y=400
          imag=canvas.create_image(550,400,anchor=CENTER,image=image33)
          y=y+2
          if y<500 :
             canvas.after(50,DeplacementImagColonne4,imag,y)
          else :
              canvas.delete(imag)
              y=400
              imag=canvas.create_image(550,400,anchor=CENTER,image=image44)
              y=y+2
              if y<500 :
                 canvas.after(5,DeplacementImagColonne4,imag,y)
              else :
                  canvas.delete(imag)
                  y=400
                  imag=canvas.create_image(550,400,anchor=CENTER,image=image55)
                  y=y+2
                  if y<500 :
                      canvas.after(5,DeplacementImagColonne4,imag,y)
                  else :
                      canvas.delete(imag)

# Programme PRINCIPAL
y=float()   # On définit la variable y qui représente l'ordonnée du canvas.
image11=PhotoImage(file="cerises.gif") # On va chercher les images
image22=PhotoImage(file="seven.gif")
image33=PhotoImage(file="cloche.gif")
image44=PhotoImage(file="pasteque.gif")
image55=PhotoImage(file="feracheval.gif")

fen.mainloop() # Cela permet de faire tourner le script et de réceptionner
               # les instructions qui sont données dans le programme.

donc c'est dans la fonction DeplacementColonne2 : j'ai fait des if imbriqués mais ça ne fonctionne pas ! la cerise apparaît; le seven aussi et même ce seven défile tout le temps cad en boucle. J'aimerais comprendre pourquoi; ce qui se passe.
merci beaucoup et appétit !

Hors ligne

#29 Le 12/05/2019, à 19:53

Nat62

Re : |python tkinter novice]- aide pour programmer une machine a sous

merci beaucoup !
c'est trop génial !
Ne vous inquiétez pas ! Ma fille va dire à son prof qu'elle a été aidée par "une pro de l'informatique" SA MAMAN ! mdr !!!
je plaisante bien sûr ! heureusement que vous étiez là !

Hors ligne

#30 Le 12/05/2019, à 20:32

pingouinux

Re : |python tkinter novice]- aide pour programmer une machine a sous

La structure est compliquée.
Chaque appel à DeplacementImagColonne2 te ramène au début de la fonction.
Pour vérifier, j'ai mis des impressions dans DeplacementImagColonne2 pour voir où tu passes, et tu ne vas jamais plus loin que le deuxième appel.

def DeplacementImagColonne2(imag,y):
    print("entrée c2 : imag=%s y=%s"%(imag,y))
    y=y+2
    canvas.move(imag,0,2)
    if y<500 :
       print("avant appel c2 1 : imag=%s y=%s"%(imag,y))
       canvas.after(10,DeplacementImagColonne2,imag,y)
    else:
       canvas.delete(imag)
       y=400
       imag=canvas.create_image(150,400,anchor=CENTER,image=image22)
       y=y+2
       if y<500 :
          print("avant appel c2 2 : imag=%s y=%s"%(imag,y))
          canvas.after(10,DeplacementImagColonne2,imag,y)     # Tu ne dépasses jamais cette ligne

Hors ligne

#31 Le 12/05/2019, à 20:39

kholo

Re : |python tkinter novice]- aide pour programmer une machine a sous

@nat62 :
outre mes recommandations... (cette fois je laisse comme c'est ! tongue )
tu peux factoriser ton code pour éviter d'avoir 3 fois presque le même code pour chaque colonne.
si je prend un de tes codes de colonne,
tu remplaces le nom par "DeplacementImagColonne" et, en argument, tu mets les différences de chaque colonne :
ensuite il faut juste adapter la fonction Demarrer et ton code sera plus simple à maintenir :

#!/usr/bin/env python3
# -*- coding: UTF8 -*-

from tkinter import *

# On définit la fonction Démarrer. Elle va être appelée quand on va cliquer
# sur le bouton Go.
def Demarrer() :
    imag11=canvas.create_image(150,400,anchor=CENTER,image=image11)
    imag12=canvas.create_image(350,400,anchor=CENTER,image=image11)
    imag13=canvas.create_image(550,400,anchor=CENTER,image=image11)
    DeplacementImagColonne(imag11,400,150,10)
    DeplacementImagColonne(imag12,400,350,7)
    DeplacementImagColonne(imag13,400,550,5)

fen=Tk()  # Création d'une fenêtre graphique avec le module tkinter
fen.title("Machine à sous")

canvas=Canvas(fen, width='700',height='700',background='black')
canvas.pack()

# Création de deux étoiles concentriques (l'un jaune et l'autre marron)
etoile1=canvas.create_polygon(350,15,317,75,250,75,301,123,280,190,350,150,
420,190,400,123,450,75,383,75,fill="yellow",outline='yellow')
etoile2=canvas.create_polygon(350,27,322,80,260,80,308,123,288,180,350,142,
412,180,393,123,440,80,378,80,fill="brown",outline='yellow')

# Création d'un rectangle de dimensions 400 sur 650; colorié en marron
# et le contour en noir.
colonne1=canvas.create_rectangle(25,250,675,650,fill="brown",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et
# 10 sur une même ligne
ligne1=canvas.create_oval(65,255,85,275,fill="yellow",outline='yellow')
ligne2=canvas.create_oval(110,260,120,270,fill="yellow",outline='yellow')
ligne3=canvas.create_oval(145,255,165,275,fill="yellow",outline='yellow')
ligne4=canvas.create_oval(190,260,200,270,fill="yellow",outline='yellow')
ligne5=canvas.create_oval(225,255,245,275,fill="yellow",outline='yellow')
ligne6=canvas.create_oval(270,260,280,270,fill="yellow",outline='yellow')
ligne7=canvas.create_oval(305,255,325,275,fill="yellow",outline='yellow')
ligne8=canvas.create_oval(350,260,360,270,fill="yellow",outline='yellow')
ligne9=canvas.create_oval(385,255,405,275,fill="yellow",outline='yellow')
ligne10=canvas.create_oval(430,260,440,270,fill="yellow",outline='yellow')
ligne11=canvas.create_oval(465,255,485,275,fill="yellow",outline='yellow')
ligne12=canvas.create_oval(510,260,520,270,fill="yellow",outline='yellow')
ligne13=canvas.create_oval(545,255,565,275,fill="yellow",outline='yellow')
ligne14=canvas.create_oval(590,260,600,270,fill="yellow",outline='yellow')
ligne15=canvas.create_oval(625,255,645,275,fill="yellow",outline='yellow')

# Création de trois rectangles de mêmes dimensions 300 sur 200;
# coloriés en blanc et leur contour en noir.
colonne2=canvas.create_rectangle(50,300,250,600,fill="white",outline="black")
colonne3=canvas.create_rectangle(250,300,450,600,fill="white",outline="black")
colonne4=canvas.create_rectangle(450,300,650,600,fill="white",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et
# 10 sur une même ligne
ligne16=canvas.create_oval(65,620,85,640,fill="yellow",outline='yellow')
ligne17=canvas.create_oval(110,625,120,635,fill="yellow",outline='yellow')
ligne18=canvas.create_oval(145,620,165,640,fill="yellow",outline='yellow')
ligne19=canvas.create_oval(190,625,200,635,fill="yellow",outline='yellow')
ligne20=canvas.create_oval(225,620,245,640,fill="yellow",outline='yellow')
ligne21=canvas.create_oval(270,625,280,635,fill="yellow",outline='yellow')
ligne22=canvas.create_oval(305,620,325,640,fill="yellow",outline='yellow')
ligne23=canvas.create_oval(350,625,360,635,fill="yellow",outline='yellow')
ligne24=canvas.create_oval(385,620,405,640,fill="yellow",outline='yellow')
ligne25=canvas.create_oval(430,625,440,635,fill="yellow",outline='yellow')
ligne26=canvas.create_oval(465,620,485,640,fill="yellow",outline='yellow')
ligne27=canvas.create_oval(510,625,520,635,fill="yellow",outline='yellow')
ligne28=canvas.create_oval(545,620,565,640,fill="yellow",outline='yellow')
ligne29=canvas.create_oval(590,625,600,635,fill="yellow",outline='yellow')
ligne30=canvas.create_oval(625,620,645,640,fill="yellow",outline='yellow')

# Création d'un bouton Go qui appelle la fonction Démarrer
boutonGo = Button(fen,text='Go',width=10,height=2,command=Demarrer)
boutonGo.place(x=310,y=90)

# On définit une fonction Déplacement pour la "colonne" qui va faire défiler
# les images.
def DeplacementImagColonne(imag, y, pos_x, vitesse):
    y=y+2
    canvas.move(imag,0,2)
    if y<500 :
       canvas.after(vitesse,DeplacementImagColonne,imag,y,pos_x,vitesse)
    else:
       canvas.delete(imag)
       y=400
       imag=canvas.create_image(pos_x,400,anchor=CENTER,image=image22)
       y=y+2
       if y<500 :
          canvas.after(vitesse,DeplacementImagColonne,imag,y,pos_x,vitesse)
       else :
          canvas.delete(imag)
          y=400
          imag=canvas.create_image(pos_x,400,anchor=CENTER,image=image33)
          y=y+2
          if y<500 :
             canvas.after(vitesse,DeplacementImagColonne,imag,y,pos_x,vitesse)
          else :
              canvas.delete(imag)
              y=400
              imag=canvas.create_image(pos_x,400,anchor=CENTER,image=image44)
              y=y+2
              if y<500 :
                 canvas.after(vitesse,DeplacementImagColonne,imag,y,pos_x,vitesse)
              else :
                  canvas.delete(imag)
                  y=400
                  imag=canvas.create_image(pos_x,400,anchor=CENTER,image=image55)
                  y=y+2
                  if y<500 :
                      canvas.after(vitesse,DeplacementImagColonne,imag,y,pos_x,vitesse)
                  else :
                      canvas.delete(imag)

# Programme PRINCIPAL
y=float()   # On définit la variable y qui représente l'ordonnée du canvas.
image11=PhotoImage(file="cerises.gif") # On va chercher les images
image22=PhotoImage(file="seven.gif")
image33=PhotoImage(file="cloche.gif")
image44=PhotoImage(file="pasteque.gif")
image55=PhotoImage(file="feracheval.gif")

fen.mainloop() # Cela permet de faire tourner le script et de réceptionner
               # les instructions qui sont données dans le programme.

d'ailleurs, j'ai changer des trucs dans ta fonction démarrer car Canvas utilise un dictionnaire pour garder les indices et les valeurs des objets quand on les crée...

et donc ton soucis est dans la composition de ta fonction
ce sont tes if imbriqués qui posent problème. Tu dois utiliser une autre approche pour gérer tes conditions :

# On définit une fonction Déplacement pour la "colonne" qui va faire défiler
# les images.
def DeplacementImagColonne(imag, y, pos_x, vitesse):
    y=y+2
    canvas.move(imag,0,2)
    if y<500 :
       canvas.after(vitesse,DeplacementImagColonne,imag,y,pos_x,vitesse)
    else:
       canvas.delete(imag)
       y=400
       imag=canvas.create_image(pos_x,400,anchor=CENTER,image=image22)
       y=y+2
       if y<500 :
          canvas.after(vitesse,DeplacementImagColonne,imag,y,pos_x,vitesse)
       else :
          canvas.delete(imag)
          y=400
          imag=canvas.create_image(pos_x,400,anchor=CENTER,image=image33)
          y=y+2
          if y<500 :
             canvas.after(vitesse,DeplacementImagColonne,imag,y,pos_x,vitesse)
          else :
              canvas.delete(imag)
              y=400
              imag=canvas.create_image(pos_x,400,anchor=CENTER,image=image44)
              y=y+2
              if y<500 :
                 canvas.after(vitesse,DeplacementImagColonne,imag,y,pos_x,vitesse)
              else :
                  canvas.delete(imag)
                  y=400
                  imag=canvas.create_image(pos_x,400,anchor=CENTER,image=image55)
                  y=y+2
                  if y<500 :
                      canvas.after(vitesse,DeplacementImagColonne,imag,y,pos_x,vitesse)
                  else :
                      canvas.delete(imag)

et, je repose : ma question tu codes avec quel logiciel ?

Hors ligne

#32 Le 13/05/2019, à 20:26

Nat62

Re : |python tkinter novice]- aide pour programmer une machine a sous

Bonsoir
je code sur édupython c'est le logiciel utllisé à l'école.
merci pour vos réponses. Je les regarderai demain car aujourd'hui j'ai fait une pause !! wink
Bonne soirée et encore merci.

Hors ligne

#33 Le 18/05/2019, à 17:27

Nat62

Re : |python tkinter novice]- aide pour programmer une machine a sous

Bonjour

ma fille a bien rendu son sujet jeudi. Le programme fonctionne très bien . Merci beaucoup ;
Par contre une copine de ambre n'a pas rendu son projet. elle doit le rendre ce lundi. Elle m'a demandé de l'aider mais je trouve ça très dur !!
Pourriez-vous encore nous aider s'il vous plaît !!!
elle vient de me donner ce qu'elle a réussi à faire ! il faut que j'essaie sur édupython.
Voilà son projet :


Problématique : l'objectif est de créer un programme qui propose des mots dont les lettres sont dans le désordre et de retrouver ses mots dans un certain temps.
CONTRAINTES : le programme sera écrit en python. Le programme doit permettre de faire des essais ou de passer au mot suivant et de compter le nombre de mots trouvés et le temps passé par un décompte du temps général

aspect : sept cases collées (ou un tableau à une ligne et à sept colonnes)
             et plus bas sept cases collées et chaque case contient une lettre

Dès que j'ai mis sur mon édupython le code qu'elle a fait; elle m'a envoyé une photo ; je vous le transmet !!!

merci beaucoup

Hors ligne

#34 Le 18/05/2019, à 17:45

nam1962

Re : |python tkinter novice]- aide pour programmer une machine a sous

Eh beh !
C'est génial qu'on fasse faire du python en seconde.
Il est amusant de voir le niveau demandé quand on connaît le niveau dans les autres matières ! tongue


[ Modéré ]

Hors ligne

#35 Le 18/05/2019, à 17:55

Nuliel

Re : |python tkinter novice]- aide pour programmer une machine a sous

Perso je trouve que faire un peu de python au collège (à la place de scratch pourquoi pas, avec turtle par exemple), ce serait quand même pas mal.

edupython c'est pas obligatoire, qu'importe le logiciel utilisé ça fonctionnera quand même. Perso j'utilise idle.

Hors ligne

#36 Le 18/05/2019, à 18:24

nam1962

Re : |python tkinter novice]- aide pour programmer une machine a sous

Et Pycharm Edu ?


[ Modéré ]

Hors ligne

#37 Le 18/05/2019, à 18:37

Nuliel

Re : |python tkinter novice]- aide pour programmer une machine a sous

Je ne connaissais pas, faudra que je regarde ça

Hors ligne

#38 Le 18/05/2019, à 20:50

Nat62

Re : |python tkinter novice]- aide pour programmer une machine a sous

from tkinter import*
def Clic(event):
    global DETECTION_CLIC_SUR_OBJET

    X= event.x
    Y= event.y
    print("Position du clic -> ",X,Y)
    [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge1)


    print("Position du clic -> ",X,Y)
    print("Position objet ->",xmin,ymin,xmax,ymax)
    if xmin <= X <=xmax and ymin <=Y<=ymax:
     DETECTION_CLIC_SUR_OBJET=True
    else:
     DETECTION_CLIC_SUR_OBJET=False
    print("DETECTION_CLIC_SUR_OBJET ->",DETECTION_CLIC_SUR_OBJET )

def Drag(event):
   #Gestion de lévénement bouton gauche enfoncé
   X= event.x
   Y= event.y
   print("Position du pointeur ->",X,Y)

   if DETECTION_CLIC_SUR_OBJET == True:
    #limite de l'objet dans la zone graphique
    if X<0:
            X=0
    if X>Largeur:
            X=Largeur
    if Y<0:
            Y=0
    if Y>Hauteur:
        Y=Hauteur
    #mise a jour de la position de l'objet (drag)
    Canevas.coords(Carre_Bouge1,X-TailleCarre1, Y-TailleCarre1,X+TailleCarre1,Y+TailleCarre1)

DETECTION_CLIC_OBJET = False




# Création de la fenêtre principale
Mafenetre = Tk()
Mafenetre.title("Le mot a trouver")

#Création d'un widget Canvas
Largeur= 400
Hauteur= 300
TailleCarre1=20
TailleCarre=20
TailleCarre2=20
Canevas=Canvas(Mafenetre,width=Largeur,height=Hauteur,bg='White')

#Création de sept carrés alignés sur une ligne dans lesquels on va y mettre les lettres
Carre1=Canevas.create_rectangle(50,100,90,140,fill='white',outline='black')
Carre2=Canevas.create_rectangle(90,100,130,140,fill='white',outline='black')
Carre3=Canevas.create_rectangle(130,100,170,140,fill='white',outline='black')
Carre4=Canevas.create_rectangle(170,100,210,140,fill='white',outline='black')
Carre5=Canevas.create_rectangle(210,100,250,140,fill='white',outline='black')
Carre6=Canevas.create_rectangle(250,100,290,140,fill='white',outline='black')
Carre7=Canevas.create_rectangle(290,100,330,140,fill='white',outline='black')


#Création de sept carrés alignés sur une ligne dans lesquels les lettres mélangées vont apparaître
Carre_Bouge1=Canevas.create_rectangle(40,200,TailleCarre1*4,TailleCarre1*12,fill='white',outline='black')
Carre_Bouge2=Canevas.create_rectangle(80,200,TailleCarre*6,TailleCarre*12,fill='white',outline='black')
Carre_Bouge3=Canevas.create_rectangle(120,200,TailleCarre*8,TailleCarre*12,fill='white',outline='black')
Carre_Bouge4=Canevas.create_rectangle(160,200,TailleCarre*10,TailleCarre*12,fill='white',outline='black')
Carre_Bouge5=Canevas.create_rectangle(200,200,TailleCarre*12,TailleCarre*12,fill='white',outline='black')
Carre_Bouge6=Canevas.create_rectangle(240,200,TailleCarre*14,TailleCarre*12,fill='white',outline='black')
Carre_Bouge7=Canevas.create_rectangle(280,200,TailleCarre*16,TailleCarre*12,fill='white',outline='black')

#La méthode bind() permet de lier un événement avec une fonction
Canevas.bind('<Button-1>',Clic) #événement clic gauche (press)
Canevas.bind('<B1-Motion>',Drag) #événement bouton gauche enfoncé (hold down)


Canevas.focus_set()
Canevas.pack(padx=10,pady=10)

j'ai tracé une ligne de sept carrés; puis une autre;
le premier carré de la deuxième ligne bouge quand on clique dessus mais je n'arrive pas à bouger les six autres !
pouvez vous m'aider me dire commet faire pour les faire bouger aussi?

maintenant j'ai aucune idée pour les lettres !!!!

merci de votre aide ; la pupuce est beaucoup désespérée !!! merci pour elle

Hors ligne

#39 Le 18/05/2019, à 21:38

Nat62

Re : |python tkinter novice]- aide pour programmer une machine a sous

j'essaie d'en faire bouger deux
Du coup j'ai mis une deuxième fois "def clic" et "def drag" mais ça ne marche pas !! le premier de la deuxième ligne ne bouge plus; c'est le deuxième carré qui bouge quand on clique dessus. pouvez-vous m'expliquer pourquoi svp ? je n'y connais pas grand chose en python !!! merci

from tkinter import*
def Clic1(event):
    global DETECTION_CLIC_SUR_OBJET

    X= event.x
    Y= event.y
    print("Position du clic -> ",X,Y)
    [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge1)


    print("Position du clic -> ",X,Y)
    print("Position objet ->",xmin,ymin,xmax,ymax)
    if xmin <= X <=xmax and ymin <=Y<=ymax:
     DETECTION_CLIC_SUR_OBJET=True
    else:
     DETECTION_CLIC_SUR_OBJET=False
    print("DETECTION_CLIC_SUR_OBJET ->",DETECTION_CLIC_SUR_OBJET )

def Drag1(event):
   #Gestion de lévénement bouton gauche enfoncé
   X= event.x
   Y= event.y
   print("Position du pointeur ->",X,Y)

   if DETECTION_CLIC_SUR_OBJET == True:
    #limite de l'objet dans la zone graphique
    if X<0:
            X=0
    if X>Largeur:
            X=Largeur
    if Y<0:
            Y=0
    if Y>Hauteur:
        Y=Hauteur
    #mise a jour de la position de l'objet (drag)
    Canevas.coords(Carre_Bouge1,X-TailleCarre1, Y-TailleCarre1,X+TailleCarre1,Y+TailleCarre1)

DETECTION_CLIC_OBJET = False

def Clic2(event):
    global DETECTION_CLIC_SUR_OBJET

    X= event.x
    Y= event.y
    print("Position du clic -> ",X,Y)
    [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge2)


    print("Position du clic -> ",X,Y)
    print("Position objet ->",xmin,ymin,xmax,ymax)
    if xmin <= X <=xmax and ymin <=Y<=ymax:
     DETECTION_CLIC_SUR_OBJET=True
    else:
     DETECTION_CLIC_SUR_OBJET=False
    print("DETECTION_CLIC_SUR_OBJET ->",DETECTION_CLIC_SUR_OBJET )

def Drag2(event):
   #Gestion de lévénement bouton gauche enfoncé
   X= event.x
   Y= event.y
   print("Position du pointeur ->",X,Y)

   if DETECTION_CLIC_SUR_OBJET == True:
    #limite de l'objet dans la zone graphique
    if X<0:
            X=0
    if X>Largeur:
            X=Largeur
    if Y<0:
            Y=0
    if Y>Hauteur:
        Y=Hauteur
    #mise a jour de la position de l'objet (drag)
    Canevas.coords(Carre_Bouge2,X-TailleCarre2, Y-TailleCarre2,X+TailleCarre2,Y+TailleCarre2)

DETECTION_CLIC_OBJET = False





# Création de la fenêtre principale
Mafenetre = Tk()
Mafenetre.title("Le mot a trouver")

#Création d'un widget Canvas
Largeur= 400
Hauteur= 300
TailleCarre1=20
TailleCarre=20
TailleCarre2=20

Canevas=Canvas(Mafenetre,width=Largeur,height=Hauteur,bg='White')

#Création de sept carrés alignés sur une ligne dans lesquels on va y mettre les lettres
Carre1=Canevas.create_rectangle(50,100,90,140,fill='white',outline='black')
Carre2=Canevas.create_rectangle(90,100,130,140,fill='white',outline='black')
Carre3=Canevas.create_rectangle(130,100,170,140,fill='white',outline='black')
Carre4=Canevas.create_rectangle(170,100,210,140,fill='white',outline='black')
Carre5=Canevas.create_rectangle(210,100,250,140,fill='white',outline='black')
Carre6=Canevas.create_rectangle(250,100,290,140,fill='white',outline='black')
Carre7=Canevas.create_rectangle(290,100,330,140,fill='white',outline='black')


#Création de sept carrés alignés sur une ligne dans lesquels les lettres mélangées vont apparaître
Carre_Bouge1=Canevas.create_rectangle(40,200,TailleCarre1*4,TailleCarre1*12,fill='white',outline='black')
Carre_Bouge2=Canevas.create_rectangle(80,200,TailleCarre2*6,TailleCarre2*12,fill='white',outline='black')
Carre_Bouge3=Canevas.create_rectangle(120,200,TailleCarre*8,TailleCarre*12,fill='white',outline='black')
Carre_Bouge4=Canevas.create_rectangle(160,200,TailleCarre*10,TailleCarre*12,fill='white',outline='black')
Carre_Bouge5=Canevas.create_rectangle(200,200,TailleCarre*12,TailleCarre*12,fill='white',outline='black')
Carre_Bouge6=Canevas.create_rectangle(240,200,TailleCarre*14,TailleCarre*12,fill='white',outline='black')
Carre_Bouge7=Canevas.create_rectangle(280,200,TailleCarre*16,TailleCarre*12,fill='white',outline='black')

#La méthode bind() permet de lier un événement avec une fonction
Canevas.bind('<Button-1>',Clic1) #événement clic gauche (press)
Canevas.bind('<B1-Motion>',Drag1) #événement bouton gauche enfoncé (hold down)


Canevas.bind('<Button-1>',Clic2) #événement clic gauche (press)
Canevas.bind('<B1-Motion>',Drag2) #événement bouton gauche enfoncé (hold down)


Canevas.focus_set()
Canevas.pack(padx=10,pady=10)
Mafenetre.mainloop()

Hors ligne

#40 Le 19/05/2019, à 01:49

kholo

Re : |python tkinter novice]- aide pour programmer une machine a sous

salut Nat62,
il manque 3 lignes à ton post #38

Canevas.focus_set()
Canevas.pack(padx=10,pady=10)
Mafenetre.mainloop()

pourquoi faire du drag and drop ? 
c'est super costaud...
mon premier programme en python était un master mind, j'ai utilisé le clic pour sélectionner l'origine puis clic pour sélectionner la destination !

sinon, pas mal le premier script...
la méthode qui te manque est find_closest
j'ai juste ajouté deux lignes et modifié les deux qui suivent pour trouver le carré cliqué et le mettre en argument de déplacement
dans fonction clic :

    objet = Canevas.find_closest(X,Y)
    # [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge1) # pas besoin
    [xmin,ymin,xmax,ymax] = Canevas.coords(objet)

dans fonction drag :

    objet = Canevas.find_closest(X,Y)
    Canevas.coords(objet,X-TailleCarre1, Y-TailleCarre1,X+TailleCarre1,Y+TailleCarre1)
    # Canevas.coords(Carre_Bouge1,X-TailleCarre1, Y-TailleCarre1,X+TailleCarre1,Y+TailleCarre1) # pas besoin

ça donne ça :

from tkinter import *
def Clic(event):
    global DETECTION_CLIC_SUR_OBJET

    X= event.x
    Y= event.y
    # print("Position du clic -> ",X,Y)
    objet = Canevas.find_closest(X,Y)
    # [xmin,ymin,xmax,ymax] = Canevas.coords(Carre_Bouge1)
    [xmin,ymin,xmax,ymax] = Canevas.coords(objet)


    # print("Position du clic -> ",X,Y)
    # print("Position objet ->",xmin,ymin,xmax,ymax)
    if xmin <= X <=xmax and ymin <=Y<=ymax:
     DETECTION_CLIC_SUR_OBJET=True
    else:
     DETECTION_CLIC_SUR_OBJET=False
    print("DETECTION_CLIC_SUR_OBJET ->",DETECTION_CLIC_SUR_OBJET )

def Drag(event):
   #Gestion de lévénement bouton gauche enfoncé
   X= event.x
   Y= event.y
   # print("Position du pointeur ->",X,Y)

   if DETECTION_CLIC_SUR_OBJET == True:
    #limite de l'objet dans la zone graphique
    if X<0:
            X=0
    if X>Largeur:
            X=Largeur
    if Y<0:
            Y=0
    if Y>Hauteur:
        Y=Hauteur
    #mise a jour de la position de l'objet (drag)
    objet = Canevas.find_closest(X,Y)
    Canevas.coords(objet,X-TailleCarre1, Y-TailleCarre1,X+TailleCarre1,Y+TailleCarre1)
    # Canevas.coords(Carre_Bouge1,X-TailleCarre1, Y-TailleCarre1,X+TailleCarre1,Y+TailleCarre1)

DETECTION_CLIC_OBJET = False




# Création de la fenêtre principale
Mafenetre = Tk()
Mafenetre.title("Le mot a trouver")

#Création d'un widget Canvas
Largeur= 400
Hauteur= 300
TailleCarre1=20
TailleCarre=20
TailleCarre2=20
Canevas=Canvas(Mafenetre,width=Largeur,height=Hauteur,bg='White')

#Création de sept carrés alignés sur une ligne dans lesquels on va y mettre les lettres
Carre1=Canevas.create_rectangle(50,100,90,140,fill='white',outline='black')
Carre2=Canevas.create_rectangle(90,100,130,140,fill='white',outline='black')
Carre3=Canevas.create_rectangle(130,100,170,140,fill='white',outline='black')
Carre4=Canevas.create_rectangle(170,100,210,140,fill='white',outline='black')
Carre5=Canevas.create_rectangle(210,100,250,140,fill='white',outline='black')
Carre6=Canevas.create_rectangle(250,100,290,140,fill='white',outline='black')
Carre7=Canevas.create_rectangle(290,100,330,140,fill='white',outline='black')


#Création de sept carrés alignés sur une ligne dans lesquels les lettres mélangées vont apparaître
Carre_Bouge1=Canevas.create_rectangle(40,200,TailleCarre1*4,TailleCarre1*12,fill='white',outline='black')
Carre_Bouge2=Canevas.create_rectangle(80,200,TailleCarre*6,TailleCarre*12,fill='white',outline='black')
Carre_Bouge3=Canevas.create_rectangle(120,200,TailleCarre*8,TailleCarre*12,fill='white',outline='black')
Carre_Bouge4=Canevas.create_rectangle(160,200,TailleCarre*10,TailleCarre*12,fill='white',outline='black')
Carre_Bouge5=Canevas.create_rectangle(200,200,TailleCarre*12,TailleCarre*12,fill='white',outline='black')
Carre_Bouge6=Canevas.create_rectangle(240,200,TailleCarre*14,TailleCarre*12,fill='white',outline='black')
Carre_Bouge7=Canevas.create_rectangle(280,200,TailleCarre*16,TailleCarre*12,fill='white',outline='black')

#La méthode bind() permet de lier un événement avec une fonction
Canevas.bind('<Button-1>',Clic) #événement clic gauche (press)
Canevas.bind('<B1-Motion>',Drag) #événement bouton gauche enfoncé (hold down)


Canevas.focus_set()
Canevas.pack(padx=10,pady=10)

Canevas.focus_set()
Canevas.pack(padx=10,pady=10)
Mafenetre.mainloop()

tous les carrés bougent mais ça fout le bordel quand on les fait se chevaucher...

Hors ligne

#41 Le 19/05/2019, à 07:29

xubu1957

Re : |python tkinter novice]- aide pour programmer une machine a sous

Bonjour,

@kholo

Une nouvelle discussion est ouverte > SOS aide pour programmer "le mot à trouver" élève de seconde


Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Résolu] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.                   Membre de Linux-Azur

En ligne

#42 Le 19/05/2019, à 09:49

kholo

Re : |python tkinter novice]- aide pour programmer une machine a sous

merci xubu1957... oui, le pire est que je l'ai vu passer !

Hors ligne