Partage
  • Partager sur Facebook
  • Partager sur Twitter

Python tkinter

Sujet résolu
    16 mai 2018 à 21:05:29

    Bonjour,

    je tiens à préciser que je suis vraiment débutant en informatique

    je suis actuellement en train de travailler sur un programme qui permettrai de faire un mastermind en version graphique à l'aide de tkinter.

    j'ai créer les boutons du mastermind.

    il me reste à dire que lorsque que l'on clique sur tel bouton. Par exemple sur le bouton rouge de la colonne 1, si c'est bon ou faux.

    j'avais pensé à affecter un nombre à chaque bouton puis dire si ce nombre correspond à celui choisis par l'ordi si il correspond ou non.

    Mais je suis bloqué et quand je clique sur un bouton cela ne marche pas.

    from tkinter import *
    from random import *
    from fonctioncouleur import *
    r1=0
    r2=0
    r3=0
    r4=0
    r5=0
    def valider() :
        x1=randint(1, 10)
        x2=randint(1, 10)
        x3=randint(1, 10)
        x4=randint(1, 10)
        print(r1)
        if x1==r1 :
            print("GG")
        else :
            print("perdu")
    
    
    def facile() :
        fnfacile= Tk()
        lab1 = Label(fnfacile, text = "couleur 1",)
        lab1.grid(row=1, column=1)
        lab2 = Label(fnfacile, text = "couleur 2",)
        lab2.grid(row=1, column=2)
        lab3  = Label(fnfacile, text = "couleur 3",)
        lab3.grid(row=1, column=3)
        lab4  = Label(fnfacile, text = "couleur 4",)
        lab4.grid(row=1, column=4)
           
        bnr1= Button (fnfacile, text="rouge",bg= "red", command= rouge1)
        bnr1.grid(row=2, column=1)
    
        bnr2= Button (fnfacile, text="rouge",bg= "red", command= rouge2)
        bnr2.grid(row=2, column=2)
    
        bnr3= Button (fnfacile, text="rouge",bg= "red", command= rouge3)
        bnr3.grid(row=2, column=3)
    
        bnr4= Button (fnfacile, text="rouge",bg= "red", command= rouge4)
        bnr4.grid(row=2, column=4)
    
        bnb1= Button (fnfacile, text="bleu", bg="blue", command= bleu1)
        bnb1.grid(row=3, column=1)
    
        bnb2= Button (fnfacile, text="bleu", bg="blue", command= bleu2)
        bnb2.grid(row=3, column=2)
    
        bnb3= Button (fnfacile, text="bleu", bg="blue", command= bleu3)
        bnb3.grid(row=3, column=3)
    
        bnb4= Button (fnfacile, text="bleu", bg="blue", command= bleu4)
        bnb4.grid(row=3, column=4)
    
        bnv1= Button (fnfacile, text="vert", bg="green", command= vert1)
        bnv1.grid(row=4, column=1)
    
        bnv2= Button (fnfacile, text="vert", bg="green", command= vert2)
        bnv2.grid(row=4, column=2)
    
        bnv3= Button (fnfacile, text="vert", bg="green", command= vert3)
        bnv3.grid(row=4, column=3)
    
        bnv4= Button (fnfacile, text="vert", bg="green", command= vert4)
        bnv4.grid(row=4, column=4)
    
        bnj1= Button (fnfacile, text="jaune", bg="yellow", command= jaune1)
        bnj1.grid(row=5, column=1)
    
        bnj2= Button (fnfacile, text="jaune", bg="yellow", command= jaune2)
        bnj2.grid(row=5, column=2)
    
        bnj3= Button (fnfacile, text="jaune", bg="yellow", command= jaune3)
        bnj3.grid(row=5, column=3)
    
        bnj4= Button (fnfacile, text="jaune", bg="yellow", command= jaune4)
        bnj4.grid(row=5, column=4)
    
    
        bno1= Button (fnfacile, text="orange", bg="orange", command= orange1)
        bno1.grid(row=6, column=1)
        
        bno2= Button (fnfacile, text="orange", bg="orange", command= orange2)
        bno2.grid(row=6, column=2)
        
        bno3= Button (fnfacile, text="orange", bg="orange", command= orange3)
        bno3.grid(row=6, column=3)
        
        bno4= Button (fnfacile, text="orange", bg="orange", command= orange4)
        bno4.grid(row=6, column=4)
    
        bnp1= Button (fnfacile, text="rose",bg="pink", command= rose1)
        bnp1.grid(row=7, column=1)
                      
        bnp2= Button (fnfacile, text="rose",bg="pink", command= rose2)
        bnp2.grid(row=7, column=2)
            
        bnp3= Button (fnfacile, text="rose",bg="pink", command= rose3)
        bnp3.grid(row=7, column=3)
            
        bnp4= Button (fnfacile, text="rose",bg="pink", command= rose4)
        bnp4.grid(row=7, column=4)
    
        bnv1= Button (fnfacile, text="violet", bg="purple", command= violet1)
        bnv1.grid(row=8, column=1)
        bnv2= Button (fnfacile, text="violet", bg="purple", command= violet2)
        bnv2.grid(row=8, column=2)
        bnv3= Button (fnfacile, text="violet", bg="purple", command= violet3)
        bnv3.grid(row=8, column=3)
        bnv4= Button (fnfacile, text="violet", bg="purple", command= violet4)
        bnv4.grid(row=8, column=4)
           
    
        bnn1= Button (fnfacile, text="noir",bg="black",fg="white", command= noir1)
        bnn1.grid(row=9, column=1)
        bnn2= Button (fnfacile, text="noir",bg="black",fg="white", command= noir2)
        bnn2.grid(row=9, column=2)
        bnn3= Button (fnfacile, text="noir",bg="black",fg="white", command= noir3)
        bnn3.grid(row=9, column=3)
        bnn4= Button (fnfacile, text="noir",bg="black",fg="white", command= noir4)
        bnn4.grid(row=9, column=4)
          
    
        bnw1= Button (fnfacile, text="blanc",bg="white",  command= blanc1)
        bnw1.grid(row=10, column=1)
        bnw2= Button (fnfacile, text="blanc",bg="white",  command= blanc2)
        bnw2.grid(row=10, column=2)
        bnw3= Button (fnfacile, text="blanc",bg="white",  command= blanc3)
        bnw3.grid(row=10, column=3)
        bnw4= Button (fnfacile, text="blanc",bg="white",  command= blanc4)
        bnw4.grid(row=10, column=4)
        
    
        bng1= Button (fnfacile, text="gris",bg="grey", command= gris1)
        bng1.grid(row=11, column=1)
        bng2= Button (fnfacile, text="gris",bg="grey", command= gris2)
        bng2.grid(row=11, column=2)
        bng3= Button (fnfacile, text="gris",bg="grey", command= gris3)
        bng3.grid(row=11, column=3)
        bng4= Button (fnfacile, text="gris",bg="grey", command= gris4)
        bng4.grid(row=11, column=4)
    
        bv=Button(fnfacile, text="valider", command=valider)
        bv.grid(row=13, column=1)
        
        
        quitter()
        fnfacile.mainloop()
    
    
    
    
    
    def difficile() :
        fndifficile= Tk()
        lab1 = Label(fndifficile, text = "couleur 1",)
        lab1.grid(row=1, column=1)
        lab2 = Label(fndifficile, text = "couleur 2",)
        lab2.grid(row=1, column=2)
        lab3  = Label(fndifficile, text = "couleur 3",)
        lab3.grid(row=1, column=3)
        lab4  = Label(fndifficile, text = "couleur 4",)
        lab4.grid(row=1, column=4)
        lab5  = Label(fndifficile, text = "couleur 5",)
        lab5.grid(row=1, column=5)
        bnr1= Button (fndifficile, text="rouge",bg= "red", command= rouge1)
        bnr1.grid(row=2, column=1)
    
        bnr2= Button (fndifficile, text="rouge",bg= "red", command= rouge2)
        bnr2.grid(row=2, column=2)
    
        bnr3= Button (fndifficile, text="rouge",bg= "red", command= rouge3)
        bnr3.grid(row=2, column=3)
    
        bnr4= Button (fndifficile, text="rouge",bg= "red", command= rouge4)
        bnr4.grid(row=2, column=4)
    
        bnr5= Button (fndifficile, text="rouge",bg= "red", command= rouge5)
        bnr5.grid(row=2, column=5)
    
        bnb1= Button (fndifficile, text="bleu", bg="blue", command= bleu1)
        bnb1.grid(row=3, column=1)
    
        bnb2= Button (fndifficile, text="bleu", bg="blue", command= bleu2)
        bnb2.grid(row=3, column=2)
    
        bnb3= Button (fndifficile, text="bleu", bg="blue", command= bleu3)
        bnb3.grid(row=3, column=3)
    
        bnb4= Button (fndifficile, text="bleu", bg="blue", command= bleu4)
        bnb4.grid(row=3, column=4)
    
        bnb5= Button (fndifficile, text="bleu", bg="blue", command= bleu5)
        bnb5.grid(row=3, column=5)
        bnv1= Button (fndifficile, text="vert", bg="green", command= vert1)
        bnv1.grid(row=4, column=1)
    
        bnv2= Button (fndifficile, text="vert", bg="green", command= vert2)
        bnv2.grid(row=4, column=2)
    
        bnv3= Button (fndifficile, text="vert", bg="green", command= vert3)
        bnv3.grid(row=4, column=3)
    
        bnv4= Button (fndifficile, text="vert", bg="green", command= vert4)
        bnv4.grid(row=4, column=4)
    
        bnv5= Button (fndifficile, text="vert", bg="green", command= vert5)
        bnv5.grid(row=4, column=5)
    
        bnj1= Button (fndifficile, text="jaune", bg="yellow", command= jaune1)
        bnj1.grid(row=5, column=1)
    
        bnj2= Button (fndifficile, text="jaune", bg="yellow", command= jaune2)
        bnj2.grid(row=5, column=2)
    
        bnj3= Button (fndifficile, text="jaune", bg="yellow", command= jaune3)
        bnj3.grid(row=5, column=3)
    
        bnj4= Button (fndifficile, text="jaune", bg="yellow", command= jaune4)
        bnj4.grid(row=5, column=4)
    
        bnj5= Button (fndifficile, text="jaune", bg="yellow", command= jaune5)
        bnj5.grid(row=5, column=5)
        bno1= Button (fndifficile, text="orange", bg="orange", command= orange1)
        bno1.grid(row=6, column=1)
        
        bno2= Button (fndifficile, text="orange", bg="orange", command= orange2)
        bno2.grid(row=6, column=2)
        
        bno3= Button (fndifficile, text="orange", bg="orange", command= orange3)
        bno3.grid(row=6, column=3)
        
        bno4= Button (fndifficile, text="orange", bg="orange", command= orange4)
        bno4.grid(row=6, column=4)
    
        bno5= Button (fndifficile, text="orange", bg="orange", command= orange5)
        bno5.grid(row=6, column=5)
    
        bnp1= Button (fndifficile, text="rose",bg="pink", command= rose1)
        bnp1.grid(row=7, column=1)
                      
        bnp2= Button (fndifficile, text="rose",bg="pink", command= rose2)
        bnp2.grid(row=7, column=2)
            
        bnp3= Button (fndifficile, text="rose",bg="pink", command= rose3)
        bnp3.grid(row=7, column=3)
            
        bnp4= Button (fndifficile, text="rose",bg="pink", command= rose4)
        bnp4.grid(row=7, column=4)
    
        bnp5= Button (fndifficile, text="rose",bg="pink", command= rose5)
        bnp5.grid(row=7, column=5)
    
        bnv1= Button (fndifficile, text="violet", bg="purple", command= violet1)
        bnv1.grid(row=8, column=1)
        bnv2= Button (fndifficile, text="violet", bg="purple", command= violet2)
        bnv2.grid(row=8, column=2)
        bnv3= Button (fndifficile, text="violet", bg="purple", command= violet3)
        bnv3.grid(row=8, column=3)
        bnv4= Button (fndifficile, text="violet", bg="purple", command= violet4)
        bnv4.grid(row=8, column=4)
        bnv5= Button (fndifficile, text="violet", bg="purple", command= violet5)
        bnv5.grid(row=8, column=5)
           
    
        bnn1= Button (fndifficile, text="noir",bg="black",fg="white", command= noir1)
        bnn1.grid(row=9, column=1)
        bnn2= Button (fndifficile, text="noir",bg="black",fg="white", command= noir2)
        bnn2.grid(row=9, column=2)
        bnn3= Button (fndifficile, text="noir",bg="black",fg="white", command= noir3)
        bnn3.grid(row=9, column=3)
        bnn4= Button (fndifficile, text="noir",bg="black",fg="white", command= noir4)
        bnn4.grid(row=9, column=4)
        bnn5= Button (fndifficile, text="noir",bg="black",fg="white", command= noir5)
        bnn5.grid(row=9, column=5)
    
        bnw1= Button (fndifficile, text="blanc",bg="white",  command= blanc1)
        bnw1.grid(row=10, column=1)
        bnw2= Button (fndifficile, text="blanc",bg="white",  command= blanc2)
        bnw2.grid(row=10, column=2)
        bnw3= Button (fndifficile, text="blanc",bg="white",  command= blanc3)
        bnw3.grid(row=10, column=3)
        bnw4= Button (fndifficile, text="blanc",bg="white",  command= blanc4)
        bnw4.grid(row=10, column=4)
        bnw5= Button (fndifficile, text="blanc",bg="white",  command= blanc5)
        bnw5.grid(row=10, column=5)
        
    
        bng1= Button (fndifficile, text="gris",bg="grey", command= gris1)
        bng1.grid(row=11, column=1)
        bng2= Button (fndifficile, text="gris",bg="grey", command= gris2)
        bng2.grid(row=11, column=2)
        bng3= Button (fndifficile, text="gris",bg="grey", command= gris3)
        bng3.grid(row=11, column=3)
        bng4= Button (fndifficile, text="gris",bg="grey", command= gris4)
        bng4.grid(row=11, column=4)
        bng5= Button (fndifficile, text="gris",bg="grey", command= gris5)
        bng5.grid(row=11, column=5)
    
        bv=Button(fndifficile, text="valider", command=valider)
        bv.grid(row=13, column=1)
        quitter()
        fndifficile.mainloop()
        
    
    
    def quitter() :
        fn.quit()
        fn.destroy()
    
    
    fn=Tk()
    b1=Button(fn, text="facile", command=facile)
    b1.pack()
    b2=Button(fn, text="difficile", command=difficile)
    b2.pack()
    b3=Button(fn, text="fermer", command=quitter)
    b3.pack()
    
    fn.mainloop()
    
    

    et la fonction defcouleur

    def rouge1() :
        r1=1
        return
    def rouge2() :
        r2=1
    
    def rouge3() :
        r3=1
    
    def rouge4() :
        r4=1
    def rouge5() :
        r5=1
    
    def bleu1() :
        r1=2
    
    def bleu2() :
        r2=2
    
    def bleu3() :
        r3=2
    
    def bleu4() :
        r4=2
    def bleu5() :
        r5=2
    
    def vert1() :
        r1=3
    
    def vert2() :
        r2=3
    
    def vert3() :
        r3=3
    
    def vert4() :
        r4=3
    def vert5() :
        r5=3
    
    
    def jaune1 () :
        r1=4
    
    def jaune2 () :
        r2=4
    
    def jaune3 () :
        r3=4
    
    def jaune4 () :
        r4=4
    def jaune5 () :
        r5=4
    
    def orange1() :
        r1=5
    
    def orange2() :
        r2=5
    
    def orange3() :
        r3=5
    
    def orange4() :
        r4=5
    def orange5() :
        r5=5
    
    def rose1() :
        r1=6
    
    def rose2() :
        r2=6
    
    def rose3() :
        r3=6
    
    def rose4() :
        r4=6
    def rose5() :
        r5=6
    
    def violet1() :
        r1=7
    def violet2() :
        r2=7
    def violet3() :
        r3=7
    def violet4() :
        r4=7
    def violet5() :
        r5=7
    
    def noir1() :
        r1=8
    def noir2() :
        r2=8
    def noir3() :
        r3=8
    def noir4() :
        r4=8
    def noir5() :
        r5=8
        
    def blanc1() :
        r1=9
    def blanc2() :
        r2=9
    def blanc3() :
        r3=9
    def blanc4() :
        r4=9
    def blanc5() :
        r5=9
    def gris1() :
        r1=10
    def gris2() :
        r2=10
    def gris3() :
        r3=10
    def gris4() :
        r4=10
    def gris5() :
        r5=10




    • Partager sur Facebook
    • Partager sur Twitter
      16 mai 2018 à 21:44:16

      Salut :)

      Mieux vaut éviter de construire (Tk()) plusieurs fois une fenêtre tkinter.

      Construis une fois ta fenêtre, puis, les autres (pour le jeu), tu construis avec le widget Toplevel(). Et tu remarqueras que 98 % (et peut-être même 100 %) du contenu des 2 fonctions facile difficile sont identiques. Dans ce cas, on préfère faire une seule fonction.

      Mais, rebosse ton algo, le fait que tu es débutant n'est en rien une excuse. La logique d'un jeu peut se faire sans avoir coder de sa vie ;)

      • Partager sur Facebook
      • Partager sur Twitter
        16 mai 2018 à 21:50:41

        Wow ok alors le code pourrait faire quelques lignes mais bon. Essai de le simplifier. Je supposes ISN. Il vaut mieux un code propre que du brouillon.
        • Partager sur Facebook
        • Partager sur Twitter
        Salut c'est moi the geoffrey.
          17 mai 2018 à 13:08:37

          Merci de vos réponses. 

          Comment utilise t'on le widget toplevel()?

          Oui je suis en isn. Nous n'avons pas étudié ça en classe :) 

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            17 mai 2018 à 15:05:24

            À mon avis, avant tkinter, on pourrait déjà voir sur console ce que ça donnerait, car là, la partie importante en ISN qui est 'comment penser à résoudre une problématique?' et non 'comment rendre beau un code console?', on est très loin de l'objectif...
            • Partager sur Facebook
            • Partager sur Twitter
              17 mai 2018 à 17:36:24

              Salut oldProgrammer, 

              On a déjà fait un programme en version console mastermind pour le projet du bac blanc... 

              On a choisis de le faire en version graphique pour le bac...

              Mais sinon même si je sais que le programme est un peu lourd. Comment fait on pour assigner à une touche une valeur.? Et puis que ensuite les nombre choisis par l'ordi aléatoirement sois comparer au nombre choisis par l'utilisateur par l'intermédiaire de couleur et le valider.

              Je sais qu'il faut le faire avec if et else mais voila.. 

              • Partager sur Facebook
              • Partager sur Twitter
                17 mai 2018 à 17:56:42

                RomainSallard a écrit:

                 Comment fait on pour assigner à une touche une valeur.?

                Salut :)

                Non, mais là, franchement, tous cours sur tkinter en parlent. Arrêtez de vous borner au cours du prof ISN, il n'est pas assez compétent. tape tkinter fdex, tu auras déjà de quoi faire.

                Vous vous prenez la tête les ISN, c'est dingue, désolé, mais, c'est dingue.

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  17 mai 2018 à 18:42:57

                  On a déjà fait un programme en version console mastermind pour le projet du bac blanc...

                  Normalement on peut s'appuyer sur le code console pour une approche graphique, seulement, si le code console ressemble à la version graphique, il faudra faire en sorte de modifier le code console pour plus de facilité par la suite.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 mai 2018 à 1:04:22

                    Bon voilà nous avons retravaillé le code voilà ce que cela donne.
                    from tkinter import*
                    
                    def facile():
                        fnfacile=Tk()
                        lab1=Label(fnfacile, text = "couleur 1",)
                        lab1.grid(row=1, column=1)
                        lab2 = Label(fnfacile, text = "couleur 2",)
                        lab2.grid(row=1, column=2)
                        lab3  = Label(fnfacile, text = "couleur 3",)
                        lab3.grid(row=1, column=3)
                        lab4  = Label(fnfacile, text = "couleur 4",)
                        lab4.grid(row=1, column=4)
                    
                        for k in range(10):
                            couleur=['rouge','bleu','vert','jaune','orange','rose','violet','noir','blanc','gris']
                            color=['red','blue','green','yellow','orange','pink','purple','black','white','grey']
                            for j in range(4):
                                Button(fnfacile,width=15,height=4,text=couleur[k],bg=color[k],command=couleur[k]+str(j+1)).grid(row=k+2,column=j+1)
                    
                        
                    
                        quitter()
                        fnfacile.mainloop()
                    
                    
                    
                    
                    
                    def difficile() :
                        fndifficile= Tk()
                        lab1 = Label(fndifficile, text = "couleur 1",)
                        lab1.grid(row=1, column=1)
                        lab2 = Label(fndifficile, text = "couleur 2",)
                        lab2.grid(row=1, column=2)
                        lab3  = Label(fndifficile, text = "couleur 3",)
                        lab3.grid(row=1, column=3)
                        lab4  = Label(fndifficile, text = "couleur 4",)
                        lab4.grid(row=1, column=4)
                        lab5  = Label(fndifficile, text = "couleur 5",)
                        lab5.grid(row=1, column=5)
                    
                    
                        for k in range(10):
                            couleur=['rouge','bleu','vert','jaune','orange','rose','violet','noir','blanc','gris']
                            color=['red','blue','green','yellow','orange','pink','purple','black','white','grey']
                            for j in range(5):
                                Button(fndifficile,width=15,height=4,text=couleur[k],bg=color[k],command= couleur[k]+str(j+1)).grid(row=k+2,column=j+1)
                    
                    
                    
                       
                        quitter()
                        fndifficile.mainloop()
                        
                    
                    
                    def quitter() :
                        fn.quit()
                        fn.destroy()
                    
                    
                    fn=Tk()
                    b1=Button(fn, text="facile", command=facile)
                    b1.pack()
                    b2=Button(fn, text="difficile", command=difficile)
                    b2.pack()
                    b3=Button(fn, text="fermer", command=quitter)
                    b3.pack()
                    
                    fn.mainloop()
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      18 mai 2018 à 9:24:22

                      C'est déjà mieux, mais je vois plusieurs problèmes,

                      • sur le fonctionnement
                      • sur la syntaxe
                      • sur la philosophie DRY

                      FONCTIONNEMENT

                      Lorsqu'on instancie un objet Tk (création d'une fenêtre principale), on crée dans le même temps une boucle événementielle, qui est là pour attendre les différentes interactions entre l'utilisateur et le programme.

                      Créer plusieurs fois un objet Tk va certes créer une nouvelle fenêtre principale, mais aussi plusieurs boucles événementielles, et c'est là le problème ! Plusieurs boucles attendant des événements, c'est le blocage du programme à coup sûr.

                      Donc à éviter... Pour résoudre ce problème (création d'une nouvelle fenêtre), on va créer une fenêtre secondaire à l'aide de l'objet Toplevel.

                      SYNTAXE

                      Le nom des variables représentent les termes de ta problématique, il faut retrouver ces termes dans ton code.

                      Éviter le from tkinter import * car tu ne sais pas quelles sont les classes, fonctions ou variables que tu importes, il y a risque de les écraser en codant de nouvelles variables dans ton code. On préférera import tkinter as tk avec tk.Label, tk.Button, ...

                      DRY

                      Éviter le code répétitif à l'aide des boucles. L'informaticien est fainéant, il déteste se répéter, et ils détestent lire un code dont certaines parties sont répétées, il faut réfléchir à une stratégie en observant.

                      Exemple pour cette partie,

                      lab1=Label(fnfacile, text = "couleur 1",)
                      lab1.grid(row=1, column=1)
                      lab2 = Label(fnfacile, text = "couleur 2",)
                      lab2.grid(row=1, column=2)
                      lab3  = Label(fnfacile, text = "couleur 3",)
                      lab3.grid(row=1, column=3)
                      lab4  = Label(fnfacile, text = "couleur 4",)
                      lab4.grid(row=1, column=4)

                      On peut avoir une réflexion intelligente.

                      def create_label(master, text, i):
                           text = f"{text} {i}"
                           label = tk.Label(master, text=text)
                           label.grid(row=1, column=i)
                           return label
                      
                      #...
                      
                      labels = []
                      for i in range(1, 5):
                          label = create_label(fnfacile, "couleur", i)
                          labels.append(label)
                      
                      

                      Non testé, mais c'est l'idée !

                      Et c'est ça que veut votre professeur ! Éviter ces codes répétitifs, car vous souhaitez rendre votre code intuitif et logique pour que l'on puisse voir les différentes étapes de résolution du problème. C'est l'algorithme qu'on recherchera, et c'est cela qu'il faudra expliquer oralement, pas la syntaxe...

                      -
                      Edité par Anonyme 18 mai 2018 à 9:29:27

                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 mai 2018 à 17:51:59

                        Ouai mais en fait je fais avec ce que le prof nous as appris en cours ^^ tu m'apprends un truc sur le from tkinter import* mais notre prof veut qu'on rédige avec ce qu'on a appris en classe sinon dans la partie orale des questions on va se faire mitrailler de question : pourquoi ça et pas ceci et ainsi de suite...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 mai 2018 à 17:59:14

                          Lama Téméraire a écrit:

                          on va se faire mitrailler de question : pourquoi ça et pas ceci et ainsi de suite...

                          Salut :)

                          Raison de plus de suivre les conseils avisés d'OldProgrammer, et en plus, tu vas les moucher les juges si tu sais répondre à ce type de question.

                          Dans ce cas, si on te pose la question : "Pourquoi avez-vous utilisé import module as mod au lieu de from module import * ?"

                          Tu réponds que ça permet de s'assurer d'éviter les doublons. Par exemple :

                          from tkinter import *
                          
                          class Label:
                              blablabla, ta classe Label fraîchement créée
                          
                          root = Tk()
                          
                          label = Label(options de tkinter)

                          Tu vas galérer à déboguer.

                          Mais, avec :

                          import tkinter as tk
                          
                          class Label:
                              blablabla, ta classe Label fraîchement créée
                          
                          root = tk.Tk()
                          
                          label = tk.Label(blablabla) # La classe Label de tkinter
                          
                          mon_label = Label(blablabla) # TA classe Label




                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            18 mai 2018 à 18:10:38

                            Lama Téméraire a écrit:

                            Ouai mais en fait je fais avec ce que le prof nous as appris en cours

                            Si votre prof vous apprend à utiliser plusieurs instances Tk, dans ce cas amène le moi que je le flingue cet incompétent...

                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 mai 2018 à 18:17:34

                              J'ai pas osé le dire, mais, je te sentais venir à une vitesse :lol:
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 mai 2018 à 19:45:02

                                Quand tu dis c'est le blocage à coup sûr? Tu veux dire que ça va ralentir le programme ? Mais ce serai le cas pour de gros programme. Le mien ne fais qu'une dizaine de ligne 😁
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  18 mai 2018 à 20:08:38

                                  Non, blocage quelque soit la taille du programme ! J'ai expliqué pourquoi... vois-tu une logique entre mes explications et la taille d'un programme ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 mai 2018 à 21:37:01

                                    Si j'avais mis 15 000 fenêtres alors ca va creer plein de boucles événementielles et donc un moment ça surcharge ? Ou je dis une connerie 😂

                                    -
                                    Edité par Lama Téméraire 18 mai 2018 à 21:37:29

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 mai 2018 à 21:41:17

                                      Non, ça, je dirais que c'est plutôt si tu charges à chaque tour de boucle le fichier d'une image.

                                      En fait, les mainloop de chaque Tk() seront désynchronisés je pense, donc, le processeur va effectuer plein de calculs et ça finira par bloquer parce qu'il ne sait plus où donner de la tête.

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        19 mai 2018 à 0:11:04

                                        Quand tu crées une instance Tk, tu fais la copie d'un interpréteur tcl. Donc logiquement, deux instances Tk, deux interpréteurs tcl, ce qui serait aberrant, c'est comme si tu utilisais deux interpréteurs python dans le même programme, absolument aucun intérêt, quelque soit le problème.Les objets créés avec une instance Tk ne pourront pas interagir avec les objets créés par une autre instance Tk.

                                        Je dis pas que c'est impossible, mais il faut une connaissance quasi parfaite du rouage de l'interpréteur tcl et je pense que dans 99,9% des problèmes, il est inutile d'en créer plus d'une. Une des raisons principales, c'est de rendre très compliqué le code et gérer son fonctionnement difficilement. Il y aura sans doute une meilleure solution, comme Toplevel dans le cas présent.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          19 mai 2018 à 1:15:16

                                          D'accord merci je vais essayer d'améliorer ça !

                                          Par contre malgré mes nombreuse recherches je n'ai toujours pas trouvé comment affecter à un bouton une variable afin de la comparer aux nombres choisis aléatoirement par l'ordi et avec if et else valider les choix

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            19 mai 2018 à 9:24:37

                                            Si c'est un entier à comparer, tu as IntVar ou DoubleVar pour les nombres flottants.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              22 mai 2018 à 3:17:45

                                              Bonjour,

                                              Alors j'ai essayé d'utiliser IntVar() dans un petit exemple.

                                              from tkinter import *
                                              import random
                                              
                                              x1=random.randint(1, 2)
                                              print(x1)
                                              
                                              fen=Tk()
                                              var=IntVar()
                                              var.set(2)
                                              print(var.get())
                                              
                                              button=Checkbutton(fen,text="Button",bg="red",variable=var)
                                              button.grid(row=2,column=1)
                                              
                                              fen.mainloop()
                                              
                                              if var==x1:
                                                  print("oui")
                                              else:
                                                  print("non")
                                              

                                              Donc voilà je choisis un nombre aléatoire en 1 et 2.

                                              puis je définis mon nombre assigné à mon boutton qui se coche(qui se nomme button avec un fond rouge) avec var.set(2) donc sur 2.


                                              puis je demande avec des if et else si le nombre assigné à mon boutton qui se coche est égal au nombre aléatoire x1 qu'il m'écrive oui et dans le cas contraire non.

                                              et bizarrement même quand le nombre choisis par l'ordi est égal à 2 donc égal au nombre assigné à mon boutton cochable il me met non.............

                                              Donc pourquoi ca me met toujours non?

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                22 mai 2018 à 7:24:15

                                                Parce que pour récupérer la valeur d'un intvar, ça se fait par la méthode get.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  22 mai 2018 à 20:33:37

                                                  Bonjour;

                                                  J'ai changé la 17è ligne du programme en var.get() et le problème persiste....

                                                  from tkinter import *
                                                  import random
                                                  
                                                  x1=random.randint(1, 2)
                                                  print(x1)
                                                  
                                                  fen=Tk()
                                                  var=IntVar()
                                                  var.set(2)
                                                  print(var.get())
                                                  
                                                  button=Checkbutton(fen,text="Button",bg="red",variable=var)
                                                  button.grid(row=2,column=1)
                                                  
                                                  fen.mainloop()
                                                  
                                                  if var.get()==x1:
                                                      print("oui")
                                                  else:
                                                      print("non")
                                                  




                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Anonyme
                                                    22 mai 2018 à 20:43:55

                                                    Le test avant le mainloop c'est mieux !
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      22 mai 2018 à 20:57:31

                                                      Ah oui maintenant ça marche mieux !

                                                      Mais le problème c'est que je veux QU'UNE FOIS que j'ai cliqué sur le Checkbutton rouge qu'il me dise oui ou non...

                                                      Parce que là je lance le programme et ça me met directement oui ou non.

                                                      J'attends une action d'utilisateur, en l’occurrence qu'il active le bouton. Car y aura plein d'autre boutton......

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        22 mai 2018 à 21:02:47

                                                        Il te suffit de définir une fonction de vérification où tu y mets les conditions voulues, et dans le constructeur du bouton, tu passes la fonction sans parenthèses au paramètre command :

                                                        import tkinter as tk
                                                        
                                                        def vérifier():
                                                            # les conditions de vérif de var.get()
                                                        
                                                        root = tk.Tk()
                                                        
                                                        var = tk.IntVar()
                                                        
                                                        bouton = tk.Button(root, ..., command=vérifier)
                                                        
                                                        root.mainloop()



                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          22 mai 2018 à 21:25:29

                                                          from tkinter import *
                                                          import random
                                                          
                                                          x1=random.randint(1, 2)
                                                          print(x1)
                                                          
                                                          def verif():
                                                              if var.get()==x1:
                                                                  print("oui")
                                                              else:
                                                                  print("non") 
                                                          
                                                          fen=Tk()
                                                          
                                                          var=IntVar()
                                                          var.set(2)
                                                          print(var.get())
                                                          
                                                          button=Checkbutton(fen,text="Button",bg="red",variable=var,command=verif)
                                                          button.grid(row=1,column=1)
                                                          
                                                          fen.mainloop()


                                                          Merci beaucoup!

                                                          Alors par contre quand je clique sur le bouton et que le nombre aléatoire choisis par l'ordi est égal à 2 donc égal au IntVar() il me mets non et inversement quand c'est les 2 différent il me mets oui alors que je demande l'inverse.........

                                                          -
                                                          Edité par Lama Téméraire 22 mai 2018 à 21:25:48

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            22 mai 2018 à 21:45:08

                                                            Aaaaah mais c'est un Checkbutton, je croyais que c'était un Button.

                                                            Je me trompe peut-être mais, je crois que quand le check est coché ça vaut 1, et 0 quand décoché. Donc ça vaudra jamais 2. J'ai testé quand x1 vaut 1, c'est vrai quand c'est coché (if ok) faux quand décoché (else).

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              22 mai 2018 à 22:07:35

                                                              J'ai testé mais on peux pas mettre variable=var dans un Button normal. C'est que dans les Checkbutton non ? Parceque sinon ça me dit erreur...
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Python tkinter

                                                              × 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