Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petit exercice sur Tkinter (niveau débutant)

Affichage de boutons sur un certains nombres de lignes et de colonnes

    1 mars 2016 à 20:25:51

    import tkinter
    from random import randint
    
    class VueDemineur :
        '''Classe qui définit et met en place une interface graphique.
        On y affiche une image de mine.
        '''
        def __init__(self):
            '''VueDemineur -> VueDemineur
            construit l'interface graphique et la lance.
            '''
            #Fenetre principale
            fenetre = tkinter.Tk()
            fenetre.title("Demineur")
    
            #Afficher les 5 images dans la fenêtre dans la fenêtre
            for i in range(5):
                self.initialisationImages()#Initialise les images aléatoirement
                self.__labelImages = []#Rend la liste vide pour acceuillir 5 autres images pour une autre ligne
                for j in range(5):
                    lbl_image = tkinter.Button(fenetre, 
                                   image=self.__images[self.__lesIndices[j]])
                    self.__labelImages.append(lbl_image)
                    self.__labelImages[j].grid(row=[i],column=[j])
    
            #Bouton qui fait ré-afficher 5 images aléatoirement
            btn_recommencer = tkinter.Button(fenetre, text="Recommencer",command=self.recommencer)
            btn_recommencer.grid(row=6,column=0)
    
            #Bouton qui fait quitter la fenetre
            btn_quitter = tkinter.Button(fenetre,
                                text="Au revoir",
                                command = fenetre.destroy)
            btn_quitter.grid(row=6,column=1)
            
            #Boucle d'écoute des événements
            fenetre.mainloop()
    
        def initialisationImages(self):
            '''VueDemineur -> None
            Enregistre toutes les images et leur attribut un indice aléatoirement'''
            #Création des images memorisées dans une liste d'objets PhotoImage
            liste_img=['rien','un','deux','trois','quatre','cinq','six','sept','huit','mine']
            self.__images = []
            for i in liste_img :
                img = tkinter.PhotoImage(file=i+".gif")
                self.__images.append(img)
            self.__lesIndices = []
            for i in range(9):
                self.__lesIndices.append(randint(0,len(self.__images)-1))
                
    #Fonction qui va servir pour la commande du bouton recommencer
        def recommencer(self):
            '''VueDemineur -> None
            Fonction qui sera la commande du bouton Recommencer et permettra d'affiche 5 autres images aléatoires'''
            self.initialisationImages()
            for i in range (5):
                self.__labelImages[i]['image']=self.__images[self.__lesIndices[i]]
                self.__labelImages[i].grid(row=1,column=[i])
    
    #Fin classe VueDemineur
    
                
    #Le script principal
    if __name__ == '__main__' :
        mon_appli = VueDemineur()

    Bonsoir, j'aurais besoin d'aide pour terminer mon exercice étant débutant sur Python... Le but étant :

    Etape 1 : Créez la classe ´ VueDemineur qui construit une fenêtre avec deux boutons : le premier affiche  demineur/mine.gif, le second est un bouton Au revoir qui permet de quitter l’application. Pour l’image, vous n’oublierez pas, après avoir crée votre fenêtre de type ˆ Tk(), de créer une instance de ´ PhotoImage a partir ` du fichier mine.gif. C’est l’instance de PhotoImage que vous pourrez poser sur le bouton. N’oubliez pas de lancer la boucle d’écoute des ´ événements ´ a la fin de votre constructeur. ` Ecrivez ´ le script principal qui lance votre application.

    Etape 2 : On veut maintenant afficher une image du démineur au hasard. Vous devez stocker les images du demineur (sous la forme de ´ PhotoImage) dans une liste, dans l’ordre suivant : rien, un, deux, trois, . . ., huit, mine. L’image cache.gif n’est pas concernée´ pour le moment. Vous devrez spécifier et écrire une fonction ´ initialisationImages qui effectue cette initialisation. Cette fonction sera appelée dans le constructeur de la classe ´ VueDemineur. Attention : cette fonction sera appelee apr ´ es avoir crée une fenêtre Tk(). Complétez votre code pour afficher une image en tirant aléatoirement une valeur dans l’intervalle [-1 ;8].

    Etape 3 : On veut maintenant afficher cinq images, tirees aléatoirement parmi les images du démineur (en dehors de cache.gif). Elles sont affichees sur 5 boutons alignés.

    Etape 4 : On reprend l’exercice précédent mais on peut rejouer et ré-afficher aléatoirement les images.

    Etape 5 : Reprenez l’exercice précédent, mais avec un affichage des images qui se fait sur 5 lignes et 5 colonnes.

    Les images représente, une mine de démineur, une image vierge, puis les chiffres de 1 à 8 (il y a 10 image au total)

    J'en suis à la dernière étape, le code que j'ai poster correspond à celui de l'étape 5, mais ici quand je lance mon programme je suis censé obtenir ça (l'alignement des boutons n'est pas identique pour moi mais ce n'est pas ça qui est important) :

    Alors que moi j'obtiens (il n'y a que ma dernière ligne qui contient les images) :

    Merci d'avance à toute âme charitable qui tentera de m'aider ! :D

    Pss: ma fonction recommencer est encore celle de l'étape d'avant je ne l'ai pas modifier, elle ne change donc qu'une seule ligne.

    -
    Edité par JacquesPlot 1 mars 2016 à 20:28:40

    • Partager sur Facebook
    • Partager sur Twitter
      19 avril 2016 à 16:26:31

      il faut que tu créé deux frames, dans la premiere tu mettrais l'affichage de ton tableau, et dans la seconde située sous la première, tu mettrais tes boutons.
      • Partager sur Facebook
      • Partager sur Twitter

      Petit exercice sur Tkinter (niveau débutant)

      × 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