Partage
  • Partager sur Facebook
  • Partager sur Twitter

erreur coding Python avec Tkinter (interface)

    10 janvier 2018 à 13:28:04

    Bonjours

    J'ai un petit problème car je cherche un crée un (petit) programme (de base) (jeu de devinette) mais je voulais aussi y mettre une interface avec le module Tkinter de python mais je n’arrive pas a raccorder

    voici le code : 

    from tkinter import Tk, StringVar, Label, Entry, Button
    from functools import partial
    import random
    nbr_secret = random.randint(1,100)
    invite = 'Devine le nombre entre 1 et 100 : '
    while True:
        nbr_joueur = input(invite)
        if nbr_secret == int(nbr_joueur):
            print ("correct !")
            break
        elif nbr_secret > int(nbr_joueur):
            print("Dommage il est trop Petit")
        else:
            print("Dommage il est trop grand")
    
    #Fin du premier début du 2eme
    
    def update_label(label, stringvar):
        text = stringvar.get()
        label.config(text=text)
        stringvar.set('merci')
    
    root = Tk()
    text = StringVar(root)
    label = Label(root, text='')
    entry_name = Entry(root, textvariable=text)
    button = Button(root, text='clic', 
                    command=partial(update_label, label, text))
    
    label.grid(column=0, row=0)
    entry_name.grid(column=0, row=1)
    button.grid(column=0, row=2)
    
    root.mainloop()

    SvP aider moi je suis debutent 

    merci :D

    • Partager sur Facebook
    • Partager sur Twitter
      10 janvier 2018 à 15:41:10

      Dan737 a écrit:

      Je te propose de regarder un petit tuto que j'avais écrit sur ce sujet. :)

      Merci a toi je suis aller voie mais je n'ais pas comprit se que tu disait sur l'autre forums

      • Partager sur Facebook
      • Partager sur Twitter
        10 janvier 2018 à 16:12:05

        Qu'est-ce que tu n'as pas compris ? Pas facile de t'aider si tu ne nous dis pas ce qui te bloque...

        -
        Edité par Dan737 10 janvier 2018 à 16:12:15

        • Partager sur Facebook
        • Partager sur Twitter
          10 janvier 2018 à 16:58:32

          Dan737 a écrit:

          Qu'est-ce que tu n'as pas compris ? Pas facile de t'aider si tu ne nous dis pas ce qui te bloque...

          -
          Edité par Dan737 il y a 44 minutes


          Bas disons que mon problème c'est que je ne sais pas quelle variable correspondant a quoi
          • Partager sur Facebook
          • Partager sur Twitter
            10 janvier 2018 à 17:04:51

            Bah disons que si tu donnes autant de détails, je ne saurai pas t'aider beaucoup plus. Désolé.
            • Partager sur Facebook
            • Partager sur Twitter
              10 janvier 2018 à 17:16:02

              Dan737 a écrit:

              Bah disons que si tu donnes autant de détails, je ne saurai pas t'aider beaucoup plus. Désolé.


              Bas je ne sais pas comment dire mais c'est comme si la javais 2 programme différent.
              • Partager sur Facebook
              • Partager sur Twitter
                11 janvier 2018 à 2:20:35

                Salut,

                En fait, votre problème, vient du fait que vous avez votre propre boucle WHILE (qui demande les saisis de textes d'utilisateurs, avec des input()) et Tkinter qui utilise lui aussi une boucle WHILE (le .mainloop()).

                Vous pouvez pas utilisez les deux, sans que l'un soit bloqué par l'autre....

                Le mieux, est de remplacer votre propre boucle WHILE, par des widget comme Entry. (Qui sert justement à saisir le texte des utilisateurs)...

                Vous avez le choix, c'est un ou l'autre....

                • soit un mode console ( avec vos input() )
                • soit un mode interface graphique (tkinter et .mainloop() )

                Donc, votre script (module), devra comporter deux fonctions (ou classes), pour ces deux modes..

                Exemple:

                def mode_console():
                    while True:
                        saisi = input(...)
                
                def mode_gui():
                    fen = Tk()
                    fen.mainloop()

                J'espère avoir été clair et précis :)

                N'hésitez pas pour les questions.

                Bonne chance

                A+

                • Partager sur Facebook
                • Partager sur Twitter
                  11 janvier 2018 à 17:03:15

                  nolimitech a écrit:

                  Salut,

                  En fait, votre problème, vient du fait que vous avez votre propre boucle WHILE (qui demande les saisis de textes d'utilisateurs, avec des input()) et Tkinter qui utilise lui aussi une boucle WHILE (le .mainloop()).

                  Vous pouvez pas utilisez les deux, sans que l'un soit bloqué par l'autre....

                  Le mieux, est de remplacer votre propre boucle WHILE, par des widget comme Entry. (Qui sert justement à saisir le texte des utilisateurs)...

                  Vous avez le choix, c'est un ou l'autre....

                  • soit un mode console ( avec vos input() )
                  • soit un mode interface graphique (tkinter et .mainloop() )

                  Donc, votre script (module), devra comporter deux fonctions (ou classes), pour ces deux modes..

                  Exemple:

                  def mode_console():
                      while True:
                          saisi = input(...)
                  
                  def mode_gui():
                      fen = Tk()
                      fen.mainloop()

                  J'espère avoir été clair et précis :)

                  N'hésitez pas pour les questions.

                  Bonne chance

                  A+

                  Merci beaucoup mais comme je suis encore débutant je ne comprend pas encore tout se que tu a mit comme les "mode_gui" ou "mode_console"

                  Mais merci encore pour ton aide

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 janvier 2018 à 13:10:55

                    Bonjours j'ai recrée le programme au dessus mais j'ai un autre problème car j'ai essayer avec une autre partit de code source
                    from tkinter import *
                    from tkinter.messagebox import * # boîte de dialogue
                    import random
                    
                    def Verification():
                        if Motdepasse.get() == random.randint:
                            # le mot de passe est bon : on affiche une boîte de dialogue puis on ferme la fenêtre
                            showinfo('Résultat','Mot de passe correct.\nAu revoir !')
                            Mafenetre.destroy()
                        elif:
                            # Chiffre trop petit : on affiche une boîte de dialogue
                            nbr_secret > int(nbr_joueur):
                            showwarning('Résultat','Chiffre trop petit.\nVeuillez recommencer !')
                            Motdepasse.set('')
                        else:
                            # le mot de passe est incorrect : on affiche une boîte de dialogue
                            showwarning('Résultat','Chiffre trop grand.\nVeuillez recommencer !')
                            Motdepasse.set('')
                    
                    # Création de la fenêtre principale (main window)
                    Mafenetre = Tk()
                    Mafenetre.title('Identification requise')
                    
                    # Création d'un widget Label (texte 'Mot de passe')
                    Label1 = Label(Mafenetre, text = 'Mot de passe ')
                    Label1.pack(side = LEFT, padx = 5, pady = 5)
                    
                    # Création d'un widget Entry (champ de saisie)
                    Motdepasse= StringVar()
                    Champ = Entry(Mafenetre, textvariable= Motdepasse)
                    Champ.focus_set()
                    Champ.pack(side = LEFT, padx = 5, pady = 5)
                    
                    # Création d'un widget Button (bouton Valider)
                    Bouton = Button(Mafenetre, text ='Valider', command = Verification)
                    Bouton.pack(side = LEFT, padx = 5, pady = 5)
                    
                    Mafenetre.mainloop()

                    PS: ne faite pas attention au "mot de passe" je ne l'ai juste pas changer pour ne pas cree d'autre bug

                    Merci:zorro:
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 janvier 2018 à 13:51:12

                      Salut,

                      Premièrement, le elif devrait contenir une condition.

                          elif nbr_secret > int(nbr_joueur):

                      Deuxièmement,le random.randint, devrait prendre deux arguments: le min et le max

                      random.randint(a, b)

                      DoctorKarwoK a dit > Bonjours j'ai recrée le programme au dessus mais j'ai un autre problème car j'ai essayer avec une autre partit de code source...

                      Il faudrait savoir, quel est votre problème?

                      Bonne chance

                      A+

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 janvier 2018 à 14:12:16

                        nolimitech a écrit:

                        Salut,

                        Premièrement, le elif devrait contenir une condition.

                            elif nbr_secret > int(nbr_joueur):

                        Deuxièmement,le random.randint, devrait prendre deux arguments: le min et le max

                        random.randint(a, b)

                        DoctorKarwoK a dit > Bonjours j'ai recrée le programme au dessus mais j'ai un autre problème car j'ai essayer avec une autre partit de code source...

                        Il faudrait savoir, quel est votre problème?

                        Bonne chance

                        A+

                        Merci pour tout mais je ne comprent pas se que tu appelle une condition pour

                        car techniquement : si nbr_secret et plus grand que le nombre tu joueur écrire chiffre trop petit

                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 janvier 2018 à 14:22:21

                          Salut,

                          Vous avez raison, mais la condition doit se trouver sur la même ligne que le elif.

                          Exemple:

                          nombre = 6
                          
                          if nombre < 3:
                              print('Plus petit que 3')
                          elif nombre > 9:
                              print('Plus grand que 9')
                          else:
                              print('Entre les deux..')

                          Tandis que, vous avez écrit la condition sur une autre ligne..

                          nombre = 6
                          
                          if nombre < 3:
                              print('Plus petit que 3')
                          
                          elif:
                              nombre > 9: # <--- Ici, cette condition ne sert à rien, elle veut rien dire pour python.
                              print('Plus grand que 9')
                          
                          else:
                              print('Entre les deux..')

                          Ce qui veux rien dire, pour python... Puisque le elif n'a aucune condition.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 janvier 2018 à 14:26:54


                            nolimitech a écrit:

                            Salut,

                            Vous avez raison, mais la condition doit se trouver sur la même ligne que le elif.

                            Exemple:

                            nombre = 6
                            
                            if nombre < 3:
                                print('Plus petit que 3')
                            elif nombre > 9:
                                print('Plus grand que 9')
                            else:
                                print('Entre les deux..')

                            Tandis que, vous avez écrit la condition sur une autre ligne..

                            nombre = 6
                            
                            if nombre < 3:
                                print('Plus petit que 3')
                            
                            elif:
                                nombre > 9: # <--- Ici, cette condition ne sert à rien, elle veut rien dire pour python.
                                print('Plus grand que 9')
                            
                            else:
                                print('Entre les deux..')

                            Ce qui veux rien dire, pour python... Puisque le elif n'a aucune condition.

                            Merci encore mais il reste des bug que je ne comprend pas, l’exécuteur python m'affiche ceci : 

                            from tkinter import *
                            >>> from tkinter.messagebox import * # boîte de dialogue
                            >>> import random
                            >>>
                            >>> def Verification():
                            ...     if Motdepasse.get() == random.randint(1, 100)
                              File "<stdin>", line 2
                                if Motdepasse.get() == random.randint(1, 100)
                                                                            ^
                            SyntaxError: invalid syntax
                            >>>         # le mot de passe est bon : on affiche une boîte de dialogue puis on ferme la fenêtre
                            ...         showinfo('Résultat','Mot de passe correct.\nAu revoir !')
                              File "<stdin>", line 2
                                showinfo('Résultat','Mot de passe correct.\nAu revoir !')
                                ^
                            IndentationError: unexpected indent
                            >>>         Mafenetre.destroy()
                              File "<stdin>", line 1
                                Mafenetre.destroy()
                                ^
                            IndentationError: unexpected indent
                            >>>
                            ...   # Chiffre trop petit : on affiche une boîte de dialogue
                            ...     elif:nbr_secret > int(nbr_joueur):
                              File "<stdin>", line 3
                                elif:nbr_secret > int(nbr_joueur):
                                ^
                            IndentationError: unexpected indent
                            >>>         showwarning('Résultat','Chiffre trop petit.\nVeuillez recommencer !')
                              File "<stdin>", line 1
                                showwarning('Résultat','Chiffre trop petit.\nVeuillez recommencer !')
                                ^
                            IndentationError: unexpected indent
                            >>>         Motdepasse.set('')
                              File "<stdin>", line 1
                                Motdepasse.set('')
                                ^
                            IndentationError: unexpected indent
                            >>>     else:
                              File "<stdin>", line 1
                                else:
                                ^
                            IndentationError: unexpected indent
                            >>>         # le mot de passe est incorrect : on affiche une boîte de dialogue
                            ...         showwarning('Résultat','Chiffre trop grand.\nVeuillez recommencer !')
                              File "<stdin>", line 2
                                showwarning('Résultat','Chiffre trop grand.\nVeuillez recommencer !')
                                ^
                            IndentationError: unexpected indent
                            >>>         Motdepasse.set('')
                              File "<stdin>", line 1
                                Motdepasse.set('')
                                ^
                            IndentationError: unexpected indent
                            >>>
                            >>> # Création de la fenêtre principale (main window)
                            ... Mafenetre = Tk()
                            >>> Mafenetre.title('Identification requise')
                            ''
                            >>>
                            >>> # Création d'un widget Label (texte 'Mot de passe')
                            ... Label1 = Label(Mafenetre, text = 'Mot de passe ')
                            >>> Label1.pack(side = LEFT, padx = 5, pady = 5)
                            >>>
                            >>> # Création d'un widget Entry (champ de saisie)
                            ... Motdepasse= StringVar()
                            >>> Champ = Entry(Mafenetre, textvariable= Motdepasse)
                            >>> Champ.focus_set()
                            >>> Champ.pack(side = LEFT, padx = 5, pady = 5)
                            >>>
                            >>> # Création d'un widget Button (bouton Valider)
                            ... Bouton = Button(Mafenetre, text ='Valider', command = Verification)
                            Traceback (most recent call last):
                              File "<stdin>", line 2, in <module>
                            NameError: name 'Verification' is not defined
                            >>> Bouton.pack(side = LEFT, padx = 5, pady = 5)
                            Traceback (most recent call last):
                              File "<stdin>", line 1, in <module>
                            NameError: name 'Bouton' is not defined
                            >>>
                            >>> Mafenetre.mainloop()




                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 janvier 2018 à 15:06:20

                              Salut,

                              Hum.. Je crois que vous vous mélangez entre le mode Interactif (Interpreter) et le mode Éditeur.

                              Vous essayez de copier/coller votre code dans le mode interactif de IDLE. Vous ne pouvez pas faire cela. Le mode interactif, sert à écrire ligne par ligne (une à la fois).

                              Donc, puisque l'on écrit ligne par ligne, les indentations se font automatiquement.

                              Tandis que, vous en copiant le code, vos indentations crée les erreurs que vous voyez.

                              Vous vous trompez complètement, sur l'utilisation de IDLE.

                              Comme je vous dis, il y a deux modes. 

                              • Lorsque vous avez un script (plein de ligne), vous devez utiliser le mode Éditeur.
                              • Lorsque vous voulez essayer un bout de code, vous utilisez le mode Interactif, mais vous DEVEZ écrire ligne par ligne...

                              Quand vous voyez des ... (trois points), c'est que la ligne n'est pas complète.

                              Pour finir, vous DEVEZ lire les erreurs indiqués.

                              ## Erreur 1: (Ligne #8) SyntaxError: invalid syntax

                              Il vous manque des deux points (:), lorsque vous avez une condition. (Ligne #8).

                              ## Erreur 2: IndentationError: unexpected indent

                              Vous êtes dans le mode INTERACTIF, donc les indentation ne sont pas comme vous le croyez.

                              ## Erreur 3:

                              Lorsque vous avez des commentaire (les lignes commencant par #), le mode INTERACTIF ne les prends pas... ils servent à rien.

                              C'est pour cela qu'il ne reconnait pas vos nouvelles variables... (Ligne #75 et #79)

                              PS: Honnêtement, je ne sais même pas par où commencer, pour vous expliquer vos erreurs, il y en a trop.

                              Commencer par exécuter votre code, dans le mode Éditeur.

                              Bonne chance

                              A+

                              • Partager sur Facebook
                              • Partager sur Twitter
                                19 janvier 2018 à 19:07:48

                                Bonjours j'aimerai crée une autre interface pour avoir les retour de frappe (chiffre)  pour savoir si le chiffre et trop grand ou pas merci
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  20 janvier 2018 à 16:26:30

                                  Salut,

                                  Ok.... ça c'est votre objectif, mais...

                                  Avez-vous réussit à faire fonctionner le bout de code que vous aviez copier/coller dans le mode INTERACTIF vers le mode ÉDITEUR?

                                  Le but est d'apprendre par vous-même. On n'est pas ici pour le faire pour vous.

                                  Nous pouvons vous aider à gérer vos erreurs ou pour des questions, mais on ne crée pas le code pour vous...

                                  Vous étiez sur la bonne voie, mais présentement je suis perdu. Où êtes-vous rendus ?

                                  N'hésitez pas pour les questions.

                                  Bonne chance

                                  A+

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    22 janvier 2018 à 14:09:31

                                    nolimitech a écrit:

                                    Salut,

                                    Ok.... ça c'est votre objectif, mais...

                                    Avez-vous réussit à faire fonctionner le bout de code que vous aviez copier/coller dans le mode INTERACTIF vers le mode ÉDITEUR?

                                    Le but est d'apprendre par vous-même. On n'est pas ici pour le faire pour vous.

                                    Nous pouvons vous aider à gérer vos erreurs ou pour des questions, mais on ne crée pas le code pour vous...

                                    Vous étiez sur la bonne voie, mais présentement je suis perdu. Où êtes-vous rendus ?

                                    N'hésitez pas pour les questions.

                                    Bonne chance

                                    A+


                                    j'ais toujours utiliser l’éditeur

                                    mais j'ai déjà corriger la moitié des erreur encore merci

                                    et oui je sais je vais le faire moi mais je n'ais pas d'exemple pour me reporter

                                    -
                                    Edité par DoctorKarwoK 22 janvier 2018 à 14:13:35

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      29 janvier 2018 à 18:08:41

                                      Bonjours et oui encore moi

                                      je suis entrain de crée un jeu mais j'ai quelque problème pour l'utilisation des touche :

                                      from tkinter import *
                                      
                                      import random
                                      
                                      from time import *
                                      
                                       
                                      
                                      #score chasseur
                                      
                                      score_chasseur = 0
                                      
                                       
                                      
                                      #score chasser
                                      
                                      score_chasser = 0
                                      
                                       
                                      
                                       
                                      
                                      def chasseur(event):
                                      
                                      #Gestion de l'événement Appui sur une touche du chasseur
                                      
                                      global PosX,PosY
                                      
                                      touche_chasseur = event.keysym
                                      
                                      print(touche_chasseur)
                                      
                                      # déplacement vers le haut
                                      
                                      if touche_chasseur == 'z':
                                      
                                      PosY -= 17
                                      
                                      # déplacement vers le bas
                                      
                                      if touche_chasseur == 's':
                                      
                                      PosY += 17
                                      
                                      # déplacement vers la droite
                                      
                                      if touche_chasseur == 'd':
                                      
                                      PosX += 17
                                      
                                      # déplacement vers la gauche
                                      
                                      if touche_chasseur == 'q':
                                      
                                      PosX -= 17
                                      
                                      Canevas.coords(Pion,PosX -10, PosY -10, PosX +10, PosY +10)
                                      
                                       
                                      
                                      def chasser(event):
                                      
                                      # Gestion de l'événement Appui sur une touche du chasser
                                      
                                      global PosX2,PosY2
                                      
                                      touche = event.keysym
                                      
                                      print(touche_chasser)
                                      
                                      # déplacement vers le haut
                                      
                                      if touche_chasser == 'o':
                                      
                                      PosY2 -= 20
                                      
                                      # déplacement vers le bas
                                      
                                      if touche_chasser == 'l':
                                      
                                      PosY2 += 20
                                      
                                      # déplacement vers la droite
                                      
                                      if touche_chasser == 'm':
                                      
                                      PosX2 += 20
                                      
                                      # déplacement vers la gauche
                                      
                                      if touche_chasser == 'k':
                                      
                                      PosX2 -= 20
                                      
                                      # on dessine le pion à sa nouvelle position
                                      
                                      Canevas.coords(Pion2,PosX2 -10, PosY2 -10, PosX2 +10 PosY2 +10)
                                      
                                       
                                      
                                      #time
                                      
                                      start = time()
                                      
                                      while time() - start < 25:
                                      
                                      time_chasser = label(Mafenetre, text= "Pion vert a gagner")
                                      
                                      time_chasser.pack(side = top, padx = 5, pady = 5)
                                      
                                       
                                      
                                      #piont pour chasser
                                      
                                      if star == 0:
                                      
                                      labelwin_chasser = label(Mafenetre, text= "Le joueur du pion vert a gagner" /n "bravo")
                                      
                                      labelwin.pack(side = center, padx = 5, pady = 5):
                                      
                                      score_chasser + 1
                                      
                                       
                                      
                                      #collision + point chasseur
                                      
                                      def collision():
                                      
                                      if Pion2 == Pion:
                                      
                                      labelwin_chasseur = label(Mafenetre, text= "Le joueur du pion rouge a gagner" /n "braveau"):
                                      
                                      score_chasseur + 1
                                      
                                       
                                      
                                       
                                      
                                      # Création de la fenêtre principale
                                      
                                      Mafenetre = Tk()
                                      
                                      Mafenetre.title('Pion VS Pion')
                                      
                                       
                                      
                                      # position initiale du pion
                                      
                                      PosX = 230
                                      
                                      PosY = 150
                                      
                                      #position 2eme pion
                                      
                                      PosX2 = 230
                                      
                                      PosY2 = 150
                                      
                                       
                                      
                                      # Création d'un widget Canvas (zone graphique)
                                      
                                      Largeur = 967
                                      
                                      Hauteur = 750
                                      
                                      Canevas = Canvas(Mafenetre, width = Largeur, height =Hauteur, bg ='white')
                                      
                                      Pion = Canevas.create_oval(PosX-10,PosY-10,PosX+10,PosY+10,width=2,outline='red',fill='red')
                                      
                                      #2eme pion
                                      
                                      Pion2 = Canevas.create_oval(PosX2-10,PosY2-10,PosX2+10,PosY2+10,width=2,outline='green',fill='green')
                                      
                                      Canevas.focus_set()
                                      
                                      Canevas.bind('<Key>',chasseur)
                                      
                                      Canevas.pack(padx =5, pady =5)
                                      
                                      Canevas.bind('<Key>',chasser)
                                      
                                      Canevas.pack(padx =5, pady =5)
                                      
                                       
                                      
                                      # Création d'un widget Button (bouton Quitter)
                                      
                                      Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy).pack(side=LEFT,padx=5,pady=5)
                                      
                                       
                                      
                                       
                                      
                                      #Tableau score
                                      
                                      fenscore = Tk()
                                      
                                      fenscore.title("Score Pion Vs Pion")
                                      
                                       
                                      
                                      label_score_nom_vert = label(fenscore, text= "Score du Pion vert (chasser)")
                                      
                                      label_score_nom_vert.pack(side = left, padx = 5, pady = 5, bg ='dark')
                                      
                                      label_score_vert = label(fenscore, text= score_chasser)
                                      
                                      label_score_vert.pack(side = left, padx = 5, pady = 5, bg ='dark')
                                      
                                       
                                      
                                      label_score_nom_rouge = label(fenscore, text= "Score du Pion rouge (chasseur)" /n score_chasseur)
                                      
                                      label_score_nom_rouge.pack(side = right, padx = 5, pady = 5, bg ='dark')
                                      
                                      label_score_rouge = label(fenscore, text= score_chasseur)
                                      
                                      label_score_rouge.pack(side = right, padx = 5, pady = 5, bg ='dark')
                                      
                                       
                                      
                                      fenscore.mainloop
                                      
                                      Mafenetre.mainloop



                                      (et jemerais aussi savoir cemment on faire un refresh, j'ai fait quelque recheche sur le net mais il faller remplacer le "Mafenetre.mainloop", et cela fesait crach le Tk)

                                      et par la suite je créérer une collision pour finaliser le jeu (avec des score)

                                      merci d'avence

                                      -
                                      Edité par DoctorKarwoK 1 février 2018 à 16:47:07

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        31 janvier 2018 à 20:33:29

                                        Salut,

                                        Enfin du code. Malheureusement, c'est bourrer d'erreurs.

                                        Avez-vous copier ce code? Parce qu'il ne fonctionne même pas.

                                        Je ne sais même pas par où commencer, pour vous expliquer vos erreurs.

                                        Votre code, n'a aucune indentation.

                                        Les fautes d'orthographes.

                                        Le mot Bravo, s'écrit pas comme ceci: Braveau. C'est Bravo!

                                        Les fautes de base python.

                                        Lorsque vous avez du texte, et que vous voulez ajouter un saut de ligne, il faut le mettre dans le texte. (Dans la string)

                                        ## PAS BON:
                                        text= "Le joueur du pion vert a gagner" /n "braveau"
                                        
                                        ## BON:
                                        text= "Le joueur du pion vert a gagner \n bravo"
                                        text= "Le joueur du pion vert a gagner" + "/n" + "bravo"

                                        Ensuite, les variables doivent être au début du code. Ou bien, avant l'appelle de ces variables, par les fonctions. Sinon, c'est une erreur garantis.


                                        Les fautes Tkinter.

                                        Pour créer des widgets labels, il faut appeler le widget. C'est-à-dire, Label(...). (Il faut une majuscule, la lettre capitale.)

                                        ## PAS BON:
                                        lbl = label(...)
                                        
                                        ## BON:
                                        lbl = Label(...)

                                        Ensuite, lorsque vous utiliser la position (le .pack()), il faut utiliser les bons mots que TKINTER comprend !

                                        Toutes vos .pack(side=), utilisent des lettres en minuscules, pourtant tkinter les reconnaît en majuscule.

                                        ## PAS BON: 
                                        label_score_vert.pack(side = left, padx = 5, pady = 5)
                                        
                                        ## BON:
                                        label_score_vert.pack(side = LEFT, padx = 5, pady = 5)

                                        Ensuite, lorsque vous voulez modifier la couleur d'un widget, vous utiliser pas la position (le .pack() ), pour configurer la couleur. Il faut le configurer dans le widget, pas dans la position, du pack.

                                        ## PAS BON:
                                        label_score_vert = label(fenscore, text= score_chasser)
                                        label_score_vert.pack(side = LEFT, padx = 5, pady = 5, bg ='dark')
                                        
                                        ## BON:
                                        label_score_vert = label(fenscore, text= score_chasser, bg='dark green')
                                        label_score_vert.pack(side = LEFT, padx = 5, pady = 5)


                                        Ensuite, pour obtenir deux fenêtres dans un seul programme, vous ne pouvez pas utiliser deux fois Tk() et deux fois mainloop(). C'est normal que tkinter crash.

                                        Tkinter à créer une méthode, qui s'appelle: Toplevel(), ce sont des fenêtres secondaires.

                                        Mafenetre = Tk() ## Fenêtre Principale (mainloop)
                                        fenscore = Toplevel() ## Fenêtre secondaire
                                        
                                        Mafenetre.mainloop() ## Un seul MAINLOOP !!!!

                                        De plus, Regardez bien la ligne du mainloop, il prend des parenthèses, puisque c'est une fonction !!! Il faut donc, l'appelez.

                                        ## PAS BON:
                                        Mafenetre.mainloop
                                        
                                        ## BON:
                                        Mafenetre.mainloop()
                                        

                                        Pour finir, puisque vous pouvez pas utiliser de boucle WHILE, avec le module Tkinter (Puisque c'est une boucle). Il faut utiliser la méthode .after().

                                        C'est un callback. Ce qui veux dire qu'il est appelé, pendant la boucle.

                                        Exemple 1 (Changez la couleur du label, tous les 1 seconde):

                                        import tkinter as tk
                                        import random
                                        
                                        COULEURS = ['red', 'green', 'blue', 'black', 'white']
                                        
                                        def le_callback():
                                            couleur = random.choice(COULEURS)
                                            label.config(bg=couleur)
                                            ## Change la couleur, tous les 1 secondes (1000 milisecondes)
                                            fenetre.after(1000, le_callback)
                                        
                                        fenetre = tk.Tk()
                                        
                                        label = tk.Label(fenetre, text='Coucou')
                                        label.pack()
                                        
                                        le_callback() ## Appel le callback
                                        
                                        fenetre.mainloop()

                                        Exemple2 (Fermer la fenêtre principale, dans 5 secondes)

                                        import tkinter as tk
                                        
                                        fenetre = tk.Tk()
                                        
                                        label = tk.Label(fenetre, text='Coucou')
                                        label.pack()
                                        
                                        fenetre.after(5000, fenetre.destroy)
                                        
                                        fenetre.mainloop()
                                        

                                        Ces exemples, démontre deux styles de callback.

                                        • La première, s'exécute à tous les X secondes, pour modifier la couleur.
                                        • La deuxième, s'exécute, qu'une seule fois, pour fermer le programme


                                        Voilà, j'espère que vous prendrez le temps de comprendre.

                                        N'hésitez pas pour les questions. Je suis sûr qu'il y a beaucoup de nouvelle notion.

                                        SVP, allez regarder la documentation de tkinter. Je vous ai donné beaucoup de mot clef, pour des recherches.

                                        Google est votre meilleur ami ! N'hésitez pas à le consulter.

                                        Bonne chance

                                        A+


                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          1 février 2018 à 17:04:50

                                          nolimitech a écrit:

                                          Salut,

                                          Enfin du code. Malheureusement, c'est bourrer d'erreurs.

                                          Avez-vous copier ce code? Parce qu'il ne fonctionne même pas.

                                          Je ne sais même pas par où commencer, pour vous expliquer vos erreurs.

                                          Votre code, n'a aucune indentation.

                                          Les fautes de base python.

                                          Lorsque vous avez du texte, et que vous voulez ajouter un saut de ligne, il faut le mettre dans le texte. (Dans la string)

                                          ## PAS BON:
                                          text= "Le joueur du pion vert a gagner" /n "braveau"
                                          
                                          ## BON:
                                          text= "Le joueur du pion vert a gagner \n bravo"
                                          text= "Le joueur du pion vert a gagner" + "/n" + "bravo"

                                          Ensuite, les variables doivent être au début du code. Ou bien, avant l'appelle de ces variables, par les fonctions. Sinon, c'est une erreur garantis.


                                          Les fautes Tkinter.

                                          Pour créer des widgets labels, il faut appeler le widget. C'est-à-dire, Label(...). (Il faut une majuscule, la lettre capitale.)

                                          ## PAS BON:
                                          lbl = label(...)
                                          
                                          ## BON:
                                          lbl = Label(...)

                                          Ensuite, lorsque vous utiliser la position (le .pack()), il faut utiliser les bons mots que TKINTER comprend !

                                          Toutes vos .pack(side=), utilisent des lettres en minuscules, pourtant tkinter les reconnaît en majuscule.

                                          ## PAS BON: 
                                          label_score_vert.pack(side = left, padx = 5, pady = 5)
                                          
                                          ## BON:
                                          label_score_vert.pack(side = LEFT, padx = 5, pady = 5)

                                          Ensuite, lorsque vous voulez modifier la couleur d'un widget, vous utiliser pas la position (le .pack() ), pour configurer la couleur. Il faut le configurer dans le widget, pas dans la position, du pack.

                                          ## PAS BON:
                                          label_score_vert = label(fenscore, text= score_chasser)
                                          label_score_vert.pack(side = LEFT, padx = 5, pady = 5, bg ='dark')
                                          
                                          ## BON:
                                          label_score_vert = label(fenscore, text= score_chasser, bg='dark green')
                                          label_score_vert.pack(side = LEFT, padx = 5, pady = 5)


                                          Ensuite, pour obtenir deux fenêtres dans un seul programme, vous ne pouvez pas utiliser deux fois Tk() et deux fois mainloop(). C'est normal que tkinter crash.

                                          Tkinter à créer une méthode, qui s'appelle: Toplevel(), ce sont des fenêtres secondaires.

                                          Mafenetre = Tk() ## Fenêtre Principale (mainloop)
                                          fenscore = Toplevel() ## Fenêtre secondaire
                                          
                                          Mafenetre.mainloop() ## Un seul MAINLOOP !!!!

                                          De plus, Regardez bien la ligne du mainloop, il prend des parenthèses, puisque c'est une fonction !!! Il faut donc, l'appelez.

                                          ## PAS BON:
                                          Mafenetre.mainloop
                                          
                                          ## BON:
                                          Mafenetre.mainloop()
                                          

                                          Pour finir, puisque vous pouvez pas utiliser de boucle WHILE, avec le module Tkinter (Puisque c'est une boucle). Il faut utiliser la méthode .after().

                                          C'est un callback. Ce qui veux dire qu'il est appelé, pendant la boucle.

                                          Exemple 1 (Changez la couleur du label, tous les 1 seconde):

                                          import tkinter as tk
                                          import random
                                          
                                          COULEURS = ['red', 'green', 'blue', 'black', 'white']
                                          
                                          def le_callback():
                                              couleur = random.choice(COULEURS)
                                              label.config(bg=couleur)
                                              ## Change la couleur, tous les 1 secondes (1000 milisecondes)
                                              fenetre.after(1000, le_callback)
                                          
                                          fenetre = tk.Tk()
                                          
                                          label = tk.Label(fenetre, text='Coucou')
                                          label.pack()
                                          
                                          le_callback() ## Appel le callback
                                          
                                          fenetre.mainloop()

                                          Exemple2 (Fermer la fenêtre principale, dans 5 secondes)

                                          import tkinter as tk
                                          
                                          fenetre = tk.Tk()
                                          
                                          label = tk.Label(fenetre, text='Coucou')
                                          label.pack()
                                          
                                          fenetre.after(5000, fenetre.destroy)
                                          
                                          fenetre.mainloop()
                                          

                                          Ces exemples, démontre deux styles de callback.

                                          • La première, s'exécute à tous les X secondes, pour modifier la couleur.
                                          • La deuxième, s'exécute, qu'une seule fois, pour fermer le programme


                                          Voilà, j'espère que vous prendrez le temps de comprendre.

                                          N'hésitez pas pour les questions. Je suis sûr qu'il y a beaucoup de nouvelle notion.

                                          SVP, allez regarder la documentation de tkinter. Je vous ai donné beaucoup de mot clef, pour des recherches.

                                          Google est votre meilleur ami ! N'hésitez pas à le consulter.

                                          Bonne chance

                                          A+


                                          rebonjours je voulais juste savoir pour le callback avec :

                                          #time
                                          start = time()
                                          while time() - start < 25:
                                              time_chasser = label(Mafenetre, text= "Pion vert a gagner")
                                              time_chasser.pack(side = top, padx = 5, pady = 5)
                                          

                                          car dans vos exemple c'est ecrie qu'il faut mettre .after apres le nom de le fenetre mais moi le "Mafenetre" et dans une parentaise et en dessous de 

                                          while True:

                                          merci d'avance



                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            5 février 2018 à 22:17:59

                                            Salut,

                                            Je ne comprend pas votre question. Quel est le but de cette boucle while?

                                            Pour l'instant, avez cette boucle, vous créez des widgets labels ayant le même nom, pendant 25 secondes (donc environs 2500 labels, qui servent à rien)

                                            Vous les voyez pas encore, puisque votre boucle Tkinter (le mainloop() Mafenetre), est après cette boucle while. Donc, ils vont apparaître après les 25 secondes.

                                            Es-ce que c'est une sorte de Countdown? de Timer? Un jeu auquel il y a un temps qui s'écoule?

                                            Il existe des exemples sur internet.

                                            Voici un exemple, très simple.:

                                            import tkinter as tk
                                            
                                            fenetre = tk.Tk()
                                            
                                            start = 0
                                            def countdown(timer):
                                                global start
                                                start += 1
                                                if start > timer:
                                                    label.config(text="Pion vert a gagner")
                                                else:
                                                    fenetre.after(1000, countdown, timer)
                                            
                                            label = tk.Label(fenetre, text="Entrain de jouer")
                                            label.pack()
                                            
                                            countdown(5)
                                            
                                            fenetre.mainloop()
                                            

                                            De plus, pour modifier un score en temps réel, il ne suffit pas de modifier votre variable score, qui est dans le label.
                                            Vous avez deux choix:

                                            • soit, vous modifiez le text du label, à chaque fois
                                            • soit, vous utilisez les variables tkinter (IntVar, StringVar, DoubleVar) et l'option textvariable=

                                            Exemple:

                                            import tkinter as tk
                                            
                                            fenetre = tk.Tk()
                                            
                                            score = 0
                                            
                                            ### Choix 1 ###:
                                            label = tk.Label(fenetre, text=score)
                                            label.pack()
                                            ## On modifie avec:
                                            score += 1
                                            label.config(text=score)
                                            
                                            ### Choix 2 ### (Variable Tkinter):
                                            var_score = tk.IntVar(value=score)
                                            label = tk.Label(fenetre, textvariable=var_score)
                                            label.pack()
                                            ## On modifie avec:
                                            score += 1
                                            var_score.set(score)
                                            
                                            
                                            fenetre.mainloop()


                                            Je crois qu'en vous mettant des exemples, je vous mélange encore plus.

                                            À la place de prendre votre jeu pour tester, vous devriez créer des petits scripts individuellement. Histoire de comprendre comment ils fonctionnent.

                                            Votre objectif est de remplacer cette boucle WHILE, par un callback .after(). Voici la documentation.

                                            Bonne chance

                                            A+

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              11 février 2018 à 16:00:35

                                              Bonjours j'aimerais crée un décompte pour un jeu mais mon IDE (pycharm) me met qu'il y a une erreur

                                              time_for_chasser = randint.random(35,45)
                                              def maj():
                                                  # on arrive ici toutes les 1000 ms
                                                  time_for_chasser =- 1
                                                  fen.after(1000,maj)

                                              Elle serait  au niveau de la ou l'on enlaive une seconde

                                              time_for_chasser =- 1

                                              merci d'avance

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                14 février 2018 à 22:40:32

                                                Salut,

                                                Je crois que c'est uniquement parce que, vous tentez de modifier une variable qui est déclaré à l'extérieur de votre fonction. L'erreur est probablement parce qu'il ne trouve pas la variable.

                                                Il faut donc utiliser global.

                                                time_for_chasser = randint.random(35,45)
                                                def maj():
                                                    global time_for_chasser
                                                

                                                Ensuite, il faudra faire attention, puisque vous aller décrémenter votre nombre en dessous de zéro. Il sera donc négatif :D (Je dis cela comme ça, à vous de voir.)


                                                PS: La prochaine fois, essayez de mettre l'erreur que votre IDE affichera, sinon c'est difficile de vous aider.Mais dans ce cas, je crois que c'est à cause du global.

                                                Bonne chance

                                                A+

                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                erreur coding Python avec Tkinter (interface)

                                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                • Editeur
                                                • Markdown