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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 753
    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 753
    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 753
    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 753
    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
    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

  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 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.

  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,
    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!

  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
    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