IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Passage pieton kilometrique


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Par défaut Passage pieton kilometrique
    Bonjour, toujours dans le livre de Swinnen
    Créer un passage piéton avec feux alternatif et bouton pour changer a couleur
    Voila mon code qui fonctionne ....mais kilometrique
    Des pistes pour le rendre plus compact...?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    from tkinter import *
     
    coul =['red','green']
    c=0
     
    fen = Tk()
    can1= Canvas(fen, width=200, height=200, bg='light grey')#le canevas
     
    can1.create_rectangle(50, 0, 150, 200, fill="grey" )# la route
    #le passage pieton
    i,x =0,52.5
    while i<7:
        can1.create_rectangle(x,80,x+10,120, fill = 'white')
        i+=1
        x+=14
     
     
     
    def changer_couleur():
        global c
     
        if c== 0:
            x1,y1  = 50,120
            feu1=can1.create_oval(x1,y1,x1+10,y1+10 , width = 3,fill = coul[1])
            x3,y3  = 50,60
            feu2=can1.create_oval(x3,y3,x3+20,y3+20 , width = 3,fill =coul[0])
            x2,y2  = 140,70
            feu1=can1.create_oval(x2,y2,x2+10,y2+10 , width = 3,fill = coul[1])
            feu2=x4,y4  = 140,120
            can1.create_oval(x4,y4,x4+20,y4+20 , width = 3,fill = coul[0])
            c=1
        else:
            x1,y1  = 50,120
            feu1=can1.create_oval(x1,y1,x1+10,y1+10 , width = 3,fill = coul[0])
            x3,y3  = 50,60
            feu2=can1.create_oval(x3,y3,x3+20,y3+20 , width = 3,fill =coul[1])
            x2,y2  = 140,70
            feu1=can1.create_oval(x2,y2,x2+10,y2+10 , width = 3,fill = coul[0])
            feu2=x4,y4  = 140,120
            can1.create_oval(x4,y4,x4+20,y4+20 , width = 3,fill = coul[1])
            c=0
     
    #créer les feux de départ        
    x1,y1  = 50,120
    feu1=can1.create_oval(x1,y1,x1+10,y1+10 , width = 3,fill = coul[0])
    x3,y3  = 50,60
    feu2=can1.create_oval(x3,y3,x3+20,y3+20 , width = 3,fill =coul[1])
    x2,y2  = 140,70
    feu1=can1.create_oval(x2,y2,x2+10,y2+10 , width = 3,fill = coul[0])
    feu2=x4,y4  = 140,120
    can1.create_oval(x4,y4,x4+20,y4+20 , width = 3,fill = coul[1])
     
    bou1 = Button(fen,text= 'changer',command =changer_couleur)
    bou1.pack(side= BOTTOM)
     
    can1.pack()    
     
    fen.mainloop()
    En tenant compte que je débute en python et que je n'ai que peu "d'outils" à ma disposition.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par yvkoe Voir le message
    Voila mon code qui fonctionne ....
    Votre code ne peut pas fonctionner a cause de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bou1 = Button(fen,text= 'changer',command =changer_couleur)
    bou.grid(row=4, column=2, sticky=E)
     
    can1.pack()
    la variable bou n'est pas déclarée.
    .grid et .pack ne font pas bon ménage.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Par défaut
    la variable bou n'est pas déclarée.
    .grid et .pack ne font pas bon ménage.
    petit oubli...cela fonctionne
    effectivement :grid et pack...
    mais cela n'est pas important
    en lancant le programme cela fonctionne sans problème mais la question est :comment faire plus court?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par yvkoe Voir le message
    en lancant le programme cela fonctionne sans problème mais la question est :comment faire plus court?
    Ben avant de faire "plus court" essayez de faire plus juste.
    Exemples:
    - pourquoi appeler la méthode ".create_oval" dans "changer_couleur"?
    - a quoi servent les variables feu1, feu2,...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Par défaut
    a quoi servent les variables feu1, feu2,...
    a avoir dans une seule variable les feux de même couleur,mais cela n'est pas nécessaire puisque je ne m'en sers pas ensuite.(peut etre dans le def?
    et c'est le def changer_couleur(): qui me pose problème

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Par défaut
    Rebonjour, j'ai trouvé cela pour créer les feux de départ
    Cela me semble plus"Python"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    cc=[[50,120,60,130], [50,60,60,70], [ 140,70,150,80,],[140,120,150,130]]
    i=0
    while i<len(cc):
        el = cc[i]
        can1.create_oval(el[0],el[1],el[2],el[3])
        i+=1
    mais pour le changer de couleur toujours rien

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par yvkoe Voir le message
    mais pour le changer de couleur toujours rien
    .itemconfig(x, fill=c)
    Quelle documentation utilisez vous?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Par défaut
    Bonjour,
    Quelle documentation utilisez vous?
    j'utilise le livre de Swinnen mais en prenant mon temps pour bien assimiler les commandes Python (qui sont différente de Java sauf que ce sont deux langages OO)
    j'en suis donc page 93 -dans la version pdf et jusque là cela "rentre" a peu près bien mais je manque d'"outils" pour le moment exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    phrase="il fait chaud"
    print(phrase[::-1])
    plutot que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    def inverse(ch):
     
        ch1 = ch
        ch2 = ""
        i = len(ch1) - 1 #index du dernier caractere de ch1
        while i >= 0:
            ch2 += ch1[i]#on ajoute/concatène un caractere de ch1 (en partant de la fin) a ch2
            i -= 1
        return ch2
    phrase="il fait chaud"
    print(inverse(phrase))
    au stade ou j'en suis, le premier code, c'est du chinois...
    je cherche donc a améliorer mes codes pour qu'ils soient plus dans l'esprit et plus court en restant compréhensible
    Voila
    Donc pour ce code là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    from tkinter import *
     
    coul =['red','green']
    c=0
     
    fen = Tk()
    can1= Canvas(fen, width=200, height=200, bg='light grey')#le canevas
     
    can1.create_rectangle(50, 0, 150, 200, fill="grey" )# la route
    #le passage pieton
    i,x =0,52.5
    while i<7:
        can1.create_rectangle(x,80,x+10,120, fill = 'white')
        i+=1
        x+=14
     
     
     
    def changer_couleur():
        global c
     
        if c== 0:
            x1,y1  = 50,120
            feu1=can1.create_oval(x1,y1,x1+10,y1+10 , width = 3,fill = coul[1])
            x3,y3  = 50,60
            feu2=can1.create_oval(x3,y3,x3+20,y3+20 , width = 3,fill =coul[0])
            x2,y2  = 140,70
            feu1=can1.create_oval(x2,y2,x2+10,y2+10 , width = 3,fill = coul[1])
            feu2=x4,y4  = 140,120
            can1.create_oval(x4,y4,x4+20,y4+20 , width = 3,fill = coul[0])
            c=1
        else:
            x1,y1  = 50,120
            feu1=can1.create_oval(x1,y1,x1+10,y1+10 , width = 3,fill = coul[0])
            x3,y3  = 50,60
            feu2=can1.create_oval(x3,y3,x3+20,y3+20 , width = 3,fill =coul[1])
            x2,y2  = 140,70
            feu1=can1.create_oval(x2,y2,x2+10,y2+10 , width = 3,fill = coul[0])
            feu2=x4,y4  = 140,120
            can1.create_oval(x4,y4,x4+20,y4+20 , width = 3,fill = coul[1])
            c=0
     
    #créer les feux de départ
    cc=[[50,120,60,130], [50,60,60,70], [ 140,70,150,80],[140,120,150,130]]
    i=0
    while i<len(cc):
        el = cc[i]
        can1.create_oval(el[0],el[1],el[2],el[3])
        i+=1
     
    bou1 = Button(fen,text= 'changer',command =changer_couleur)
    bou1.pack(side= BOTTOM)
     
    can1.pack()    
     
    fen.mainloop()
    Cela fonctionne (sauf que les feux sont "vides au départ"mais je crois que l'emploi de la liste est mieux que de répéter les can1.create.
    Voila ou j'en suis

  9. #9
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Bonjour,
    Ainsi que le fait remarquer wiztricks, utiliser .itemconfig(x, fill=c) est intéressant

    À revoir, mais c'est juste pour le principe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    from tkinter import *
     
    coul =['red','green']
    c=0
     
    fen = Tk()
    can1= Canvas(fen, width=200, height=200, bg='light grey')#le canevas
     
    can1.create_rectangle(50, 0, 150, 200, fill="grey" )# la route
    #le passage pieton
    i,x =0,52.5
    while i<7:
        can1.create_rectangle(x,80,x+10,120, fill = 'white')
        i+=1
        x+=14
     
    ##def changer_couleur():
    ##    global c
    ## 
    ##    if c== 0:
    ##        x1,y1  = 50,120
    ##        feu1=can1.create_oval(x1,y1,x1+10,y1+10 , width = 3,fill = coul[1])
    ##        x3,y3  = 50,60
    ##        feu2=can1.create_oval(x3,y3,x3+20,y3+20 , width = 3,fill =coul[0])
    ##        x2,y2  = 140,70
    ##        feu1=can1.create_oval(x2,y2,x2+10,y2+10 , width = 3,fill = coul[1])
    ##        feu2=x4,y4  = 140,120
    ##        can1.create_oval(x4,y4,x4+20,y4+20 , width = 3,fill = coul[0])
    ##        c=1
    ##    else:
    ##        x1,y1  = 50,120
    ##        feu1=can1.create_oval(x1,y1,x1+10,y1+10 , width = 3,fill = coul[0])
    ##        x3,y3  = 50,60
    ##        feu2=can1.create_oval(x3,y3,x3+20,y3+20 , width = 3,fill =coul[1])
    ##        x2,y2  = 140,70
    ##        feu1=can1.create_oval(x2,y2,x2+10,y2+10 , width = 3,fill = coul[0])
    ##        feu2=x4,y4  = 140,120
    ##        can1.create_oval(x4,y4,x4+20,y4+20 , width = 3,fill = coul[1])
    ##        c=0
     
    def change_couleur():
        global c
        c=(c+1)%2
        c2=(c+1)%2       # pour "boucler" sur les valeurs de couleur
        can1.itemconfig(f0, fill=coul[c])
        can1.itemconfig(f1, fill=coul[c2])
        can1.itemconfig(f2, fill=coul[c])
        can1.itemconfig(f3, fill=coul[c2])
     
    #créer les feux de départ
    cc=[[50,120,60,130], [50,60,60,70], [ 140,70,150,80],[140,120,150,130]]
    f0=can1.create_oval(cc[0][0],cc[0][1],cc[0][2],cc[0][3])
    f1=can1.create_oval(cc[1][0],cc[1][1],cc[1][2],cc[1][3])
    f2=can1.create_oval(cc[2][0],cc[2][1],cc[2][2],cc[2][3])
    f3=can1.create_oval(cc[3][0],cc[3][1],cc[3][2],cc[3][3])
     
    ##i=0
    ##while i<len(cc):
    ##    el = cc[i]
    ##    can1.create_oval(el[0],el[1],el[2],el[3])
    ##    i+=1
     
    bou1 = Button(fen,text= 'changer',command =change_couleur)
    bou1.pack(side= BOTTOM)
     
    can1.pack()    
     
    fen.mainloop()
    Sinon, comme documentation importante, il y a aussi celle de tkinter (disponible sur developpez)

    PS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    phrase="il fait chaud"
    print(phrase[::-1])
    phrase[x:y:z]: découpe de x à y (non compris) par pas de z. Par défaut, x=0, y=len(phrase)-1, z=1.
    Autre possibilité: la numérotation peut être inversée: le dernier élément est alors -1 et -len(phrase) est le premier élément!!!
    Donc phrase[:] renvoie la phrase complète (z est par défaut à 1).
    Et phrase[::1] renvoie la phrase complète mais le pas est de -1 et commence par la fin (la numérotation est inversée!!

    PS2: sur le site developpez il est traduit, mais je ne l'ai pas retrouvé.
    Sinon il y a la documentation en anglais

    Clodion

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Par défaut
    bonjour et merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    phrase[x:y:z]: découpe de x à y (non compris) par pas de z. Par défaut, x=0, y=len(phrase)-1, z=1.
    Autre possibilité: la numérotation peut être inversée: le dernier élément est alors -1 et -len(phrase) est le premier élément!!!
    Donc phrase[:] renvoie la phrase complète (z est par défaut à 1).
    Et phrase[::1] renvoie la phrase complète mais le pas est de -1 et commence par la fin (la numérotation est inversée!!
    j'ai compris
    2 petites questions:
    c=(c+1)%2
    c2=(c+1)%2 # pour "boucler" sur les valeurs de couleur
    Donc on met dans 2 variables différentes le même contenu???
    une petite explication serait la bienvenue.
    ensuite :
    j'aimerais que les "feux" aient une couleur au départ,comment faire? car si je rajoute dans le "creer les feux de depart" fill=coul[0], j'ai une erreur( 5 elements au lieu de 2 ou 4)pour create_oval ce qui est normal
    Merci
    Y.

  11. #11
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Bonjour,
    Pour
    c=(c+1)%2
    c2=(c+1)%2 # pour "boucler" sur les valeurs de couleur
    Les deux variables n'ont pas le même contenu!! Si c1 vaut 0, c2 vaut 1 et si c1 vaut 1 alors c2 vaut 0!!
    (Je ne sais pas si tu utilise déjà l'opérateur not: si tu l'utilise, alors une seule variable est nécessaire puisque c=0 => not c=1 et que c=1=>not c=0)

    Pour que les feux soient positionnés dès le départ, il suffit d'appeler change_couleur() juste après la création des feux (ligne 57), non???

    Clodion!

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Par défaut
    Les deux variables n'ont pas le même contenu!! Si c1 vaut 0, c2 vaut 1 et si c1 vaut 1 alors c2 vaut 0!!
    mais c'est bien sur...
    normal pour change_couleur mais cela ne vient pas naturellement....
    comme disait je ne sais plus qui sur ce forum:
    "celui qui trouve sans chercher est celui qui a souvent cherché sans trouver" moi je suis le second

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Pb BDE suite a passage en Windows 2000 pro
    Par ARIF dans le forum Paradox
    Réponses: 4
    Dernier message: 18/11/2002, 11h39
  3. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15
  4. [VB6]Passage par référence d'une prop. d'objet à une fct
    Par -gYs- dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 02/09/2002, 08h55
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo