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

Tkinter Python Discussion :

Problème avec la fonction command pour les boutons


Sujet :

Tkinter Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Problème avec la fonction command pour les boutons
    Bonjour

    je suis débutant sur python et je voudrais créer une version de flappy bird pour mon projet de bac,je voudrais creer un bouton nouvelle partie mais le hic c'est que ma fonction command ne marche pas et je ne sais pas pourquoi,car selon moi j'ai remis toutes les déf qui permettent au jeu de fonctionner et je ne vois pas le probleme de mon codage
    Le message d'erreur est 'positional argument follows keyword argument'

    Merci de votre aide !!

    Voici mon code :


    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    from tkinter.messagebox import *
    from tkinter import *
    
    fenetre= Tk()
    
    def monter(event):
        
        global PosX,PosY
        touche = event.keysym
        
    
        # déplacement vers le haut
        
        if touche == 'Up'and PosY>15:
            PosY -= 30
            touche = 0
    
        else:
            PosY == 10 
            PosY -= 0
     
    def tomber():
    
        global PosX,PosY,fin_ou_pas
    
        fin_ou_pas = fin(PosY)
    
        # fait tomber le rond toute les 500ms
    
        if fin_ou_pas != 'fin':
            PosY += 20
            fenetre.after(500,tomber)
            
            Canvas.coords(Rond,PosX -10, PosY -10, PosX +10, PosY +10)
        
    
    def fin(PosY):
        print(PosY)
        if PosY==300:
           showinfo('fin', 'Vous avez perdu fin')
           #messagebox.showinfo("Finish for you LOOSER","PERDU")
           return 'fin'
    
    def fin1(PosX,posA):
        
        if PosX == posA :
            #showinfo('fin', 'Vous avez perdu')
    
            #messagebox.showinfo("Finish for you LOOSER","PERDU")
            return 'fin1'
       
            
            
            
    def avancer():
    
        global posA,posB
        global posC,posD
        global terminer, PosY, créer
    
       # terminer = fin1(PosX,posA)
        print(PosX+10,posA-20, PosX-10,posA+20)
        print(PosY-10,posD+100,PosY+10,posB-20)
    
        if PosY-10>=posD+100 and PosY+10<=posB-20 or PosX+10<=posA-20 or PosX-10>=posA+20:
            # fait avancer le décor
            posA -= 10 #distance
            posC -= 10
            #création nouvel obstacle qui bouge
            Canvas.coords(obstacle,posA -20,posB -0,posA +20,posB +120)
            Canvas.coords(obstacle1,posC -20,posD -20,posC +20,posD +100)
    
            fenetre.after(800,avancer) #temps
    
        else:
            showinfo('fin', 'Vous avez perdu avancer')
    
    
    
    
    def repeter():
        
        global avancer
        global posA,posB
        global posC,posD
        global terminer
    
        #for k in range(1,10,1):
            #créer()
            
            
    
    
        
    terminer="nul"    
    fin_ou_pas="pas"
    
    
    
    def perdu():
    
        if 'fin1':
           showinfo('fin', 'Vous avez perdu')
    
        else:
            if 'fin':
                showinfo('fin', 'Vous avez perdu')
    
                
    Bouton2 = Button(fenetre,text="Nouvelle partie",command=monter,tomber,fin,fin1,avancer,repeter,perdu)     
    Bouton2.pack(side=LEFT, padx = 25, pady = 15)
    Bouton2.config(font=('arial', 13, 'bold'))
    Bouton2.activeforeground="red"
    Bouton2.activebackground="blue"

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Salut,

    Citation Envoyé par graall Voir le message
    je suis débutant sur python et je voudrais créer une version de flappy bird pour mon projet de bac,je voudrais creer un bouton nouvelle partie mais le hic c'est que ma fonction command ne marche pas et je ne sais pas pourquoi,car selon moi j'ai remis toutes les déf qui permettent au jeu de fonctionner et je ne vois pas le probleme de mon codage
    Le message d'erreur: 'positional argument follows keyword argument' est du à l'écriture de votre liste. Avec command=monter, tomber, fin, ... "monter" sera la valeur associée au "keyword argument" command et tomber, fin,... n'étant pas précédé par "machin=" sont considérés comme "positional arguments". Ce que Python ne permet pas.
    Pour que ce soit correct côté "syntaxe", vous pourriez écrire command = [ monter, tomber, fin,... ] ou command = (monter, tomber, fin,...).
    Mais çà ne fonctionnera pas pour autant car Button sait appeler une fonction et non une liste de fonction.

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

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci wiztrick de ton aide mais comment pourrait je alors créer un bouton nouvelle partie, car la je vois pas comment faire pour faire marcher mon jeu quand je clique sur ce bouton ??

    Cordialement

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Citation Envoyé par graall Voir le message
    comment pourrait je alors créer un bouton nouvelle partie, car la je vois pas comment faire pour faire marcher mon jeu quand je clique sur ce bouton ??
    Créer le bouton est assez simple: button = Button(..., command=nouvelle_partie,...), ce qui peut être compliqué c'est définir ce que fera la fonction nouvelle_partie pour remettre le jeu dans son état initial pour que... Et cela dépend du jeu que vous avez créé (et pas du Button).
    Relisez votre code, vous avez un tas de variables globales dont l'état initial mériterait d'être souligné (en les plaçant dans une fonction init par exemple),... Ce serait un bon début.

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

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Si j'ai bien compris je dois créer une def nouvelle partie qui reprend tout le codage de mon jeu ??

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Citation Envoyé par graall Voir le message
    Si j'ai bien compris je dois créer une def nouvelle partie qui reprend tout le codage de mon jeu ??
    Créer une "def"? On dit créer une fonction (et comme il s'agit d'une fonction qui sera appelée par l'action sur un Button, on peut même l'appeler "callback"). Relisez ce que je raconte, je parle d'état de votre jeu et de "variables globales". Autrement dit, des choses (état, variable, globale,...) avec des termes techniques qui recouvrent des "concepts" que vous êtes supposé avoir appris dans un tuto.

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

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    ok merci de votre aide !!

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Mon professeur m'a dit par mail que je devrais crée une fonction nouvelle partie et donc c'est ce que j'ai fait mais un message d'erreur apparait: event is no defined

    voici mon code :

    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
    def nouvelle_partie():
     
        monter(event)
        fin(posY)
        tomber()
        avancer()
        repeter()
        perdu()
     
     
    Bouton2 = Button(fenetre,text="Nouvelle partie",command= nouvelle_partie)
    Bouton2.pack(side=LEFT, padx = 25, pady = 15)
    Bouton2.config(font=('arial', 13, 'bold'))
    Bouton2.activeforeground="red"
    Bouton2.activebackground="blue"

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Citation Envoyé par graall Voir le message
    Mon professeur m'a dit par mail que je devrais crée une fonction nouvelle partie et donc c'est ce que j'ai fait mais un message d'erreur apparait: event is no defined
    monter est un callback appelé par tkinter. Si tkinter sait fabriquer event à lui passer, qu'allez vous pouvoir y mettre (d'autant que cette fonction/callback en a besoin)?
    Expliquez pourquoi/comment l'appel de ces fonctions/callbacks remettra le jeu dans son état initial?

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/02/2009, 09h44
  2. Réponses: 9
    Dernier message: 29/04/2008, 13h38
  3. [MySQL] Problème avec la fonction fgets et les retours chariot
    Par didoulive dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/02/2008, 19h08
  4. Problème avec Visual Studio 2005 pour les MessageBox
    Par saphir54321 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/04/2007, 23h27
  5. [JMeter] Problème avec la boucle infinie pour les tests
    Par zegreg dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 05/10/2005, 11h41

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