Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage résultat fonction avec Tkinter

    11 avril 2021 à 19:04:28

    Bonjour tout le monde, 

    J'ai eu l'idée avec un camarade de classe de faire un générateur de poème, il est en HLP et moi en NSI, nous avons donc décidé de lié ces deux matières pour un concours au sein de notre lycée.

    Le générateur de poème marche très bien il n'était pas compliqué à faire en vérité même en gérant les rimes etc... 

    Par contre ce qui me pose problème c'est créer une interface utilisateur, le but de ce projet c'est que tout le monde puisse générer des poèmes avec une interface utilisateur simple à utiliser sans passé par ouvrir le fichier python dans un IDLE ( par exemple pour les gens qui ont des spé littéraires et qui voudraient tester le programme)

    Je viens du coup vers vous car mon problème est le suivant, je n'arrive pas à afficher le résultat de ma fonction prog() en appuyant sur le bouton générez. Ce dernier me renvoie bien le résultat dans la console mais pas sur la page Tkinter, je cherche depuis ce matin des tutos ou des réponses à mon problème mais sans grand succès. 

    Dans le code que je vous fournis, ne faites pas attention aux bouts de phrases ce sont des test, de plus les entrées nombre de vers, de paragraphes et la disposition des times sont à rentrer dans la console pour le moment, je m'occuperai dans un deuxième temps d'implementer des champs de saisies qui me permettront de récupérer ces variables entrées par l'utilisateur. 

    Merci d'avance !! 

    import random                                                 # On importe le module random qui va nous servir à choisir au hasard les différentes listes 
    from tkinter import*
    
    
    
    debut1 = [["La chaleur de minuit"],
              ["Un prisonnier de l'été"],
              ["Ta volonté"],
              ["C'est mon esprit et mon corps"],
              ["Un hopital psychiatrique"],
              ["Oeuvre de mes pulsions"],
              ["Dans les enfers"],
              ["Ecoutant ton poeme"],
              ["Je souffre"],
              ["J'imagine ta voix"],
              ["Etourdi à l'hôpital"],
              ["Etant convaincu"],
              ["Pénétrant tes yeux"],
              ["Je te crie"],
              ["Je te jure ma libération"]]
    
    rime_ol = [["sous le sol"],
               ["mon envol"]]
    
    rime_re = [["me débattre"],
               ["me battre"]]
    
    rime_eur = [["monstre gateau et rongeur"],
                ["comme l'artilleur"]]
    
    rime_oi = [["Où je me noie"]]
    
    rime_i = [["A l'agonie"],
              ["O chaleur de minuit"]]
    rime_ir = [["Pleine de plaisirs"],
               ["Où je ousffre le martyre"]]
    
    rime_er = [["Je voudrais tout retrouver"]]
    
    rime_al = [["Dans ce vide infernal"],
               "Désir penal"]
    
    rime_e = [["Comme un prisonnier libérée"]]
    
    liste_rimes = [rime_ol, rime_re, rime_eur, rime_oi, rime_i, rime_ir, rime_er, rime_al, rime_e]
    
    
    
    
    
    def rimes_croisees():
        """Fonction qui permet de disposer les vers de façon à faire des rimes croisées
        Return type : str"""
        
        rimeA = random.choice(liste_rimes)
        rimeB = random.choice(liste_rimes)
        
        for i in range(2):
            lst1 = random.choice(debut1) + random.choice(rimeA)
            print(" ".join(lst1))
            lst2 = random.choice(debut1) + random.choice(rimeB)
            print(" ".join(lst2))
            
    
            
            
    def rimes_plates():
        """Fonction qui permet de disposer les vers de façon à faire des rimes plates
        Return type : str"""
        
        rimeA = random.choice(liste_rimes)
        rimeB = random.choice(liste_rimes)
        
        for loop in range(2):
            lst = random.choice(debut1) + random.choice(rimeA)
            print(" ".join(lst))
       
        for loop in range(2):
            lst = random.choice(debut1) + random.choice(rimeB)
            print(" ".join(lst))
        
    
        
    def rimes_embrassees():
        """Fonction qui permet de disposer les vers de façons à faire des rimes embrassées
        Return type : str"""
    
        rimeA = random.choice(liste_rimes)
        rimeB = random.choice(liste_rimes)
        
        lst = random.choice(debut1) + random.choice(rimeA)
        print(" ".join(lst))
        for loop in range(2):
            lst = random.choice(debut1) + random.choice(rimeB)
            print(" ".join(lst))
        
        lst = random.choice(debut1) + random.choice(rimeA)
        print(" ".join(lst))
    
    
    
    
    
    nombre_de_vers = int(input("Entrez le nombre de vers que vous souhaitez (minimum 4 vers) : "))
    nombre_de_paragraphe = int(input("Entrez le nombre de paragraphe que vous souhaitez (minimum 1) : "))
    
    disposition_rime = input("Choisissez parmit les dispositions suivantes : Rimes plates - Rimes croisées - Rimes embrassées : ")
    
    
    
    print()
    
    def prog():
        for i in range(nombre_de_paragraphe):
            if disposition_rime == "Rimes plates":
                print(rimes_plates())
                print()
            elif disposition_rime == "Rimes croisées":
                print(rimes_croisees())
                print()
            else:
                print(rimes_embrassees())
                print()
    
    
    
    
    fenetre = Tk()
    fenetre.title("Poeme")
    
    fenetre.geometry("500x500")
    fenetre.config(background = "#3A349D")
    
    
    label_title = Label(fenetre,text="Bienvenue dans le générateur de poème", font=("Arial", 20), bg = "#3A349D", fg = "white")
    label_title.place(x=550,y=100)
    
    
    text = Label(fenetre, text="Application inspirée du site Poetron, ici vous pouvez générer des poèmes à votre guise", font=("Arial", 15),  
                  bg = "#3A349D", fg = "white")
    text.place(x=420, y=150)
    
    
    def affichage():
        champ = Label(fenetre, text=prog(), height=20, width=50)
        champ.place(x=600, y= 300)
    
    
    btn = Button(fenetre, text="Générez", font=("Arial"), width=20, command=affichage)
    btn.place(x=700, y=200)
    
                
    fenetre.mainloop()
    
    



    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2021 à 10:29:21

      Bonjour,

      As-tu vraiment cherché dans les tutos Tkinter ?

      Ton bouton est censé appeler une fonction nommée affichage:

      btn = Button(..............., command = affichage)

      et je ne vois pas de fonction affichage dans ton code ....

      De plus input et print, c'est utile est mode console, mais avec une interface graphique, il faut utiliser d'autres fonctions

      • Partager sur Facebook
      • Partager sur Twitter
        12 avril 2021 à 11:00:43

        Ma fonction affichage est en ligne 144

        D'accord je vais continuer à chercher, donc en fait faut que je revois carrément mes fonctions, je ne peux pas faire de print etc...

        Merci :)

        • Partager sur Facebook
        • Partager sur Twitter
          12 avril 2021 à 12:18:30

          ta fonction affichage doit afficher le texte issu de la génération. lIl appelle bien prog() mais prog ne renvoie rien, il fait juste l'affichage en console. il faut que ce prog stocke et renvoie la chaine correspondante au poème (donc la concaténation des appels aux fonctions rimes (+ un '\n' au niveau des appels à print().

          PS: une coquille ligne 107: "parmit"  ça va choquer vos ami.e.s littéraires => "parmi"

          mais le programme est un peu "tordu": il nécessite de rentrer des infos en console, affiche (actuellement) le résultat en console, et vous voulez ensuite l'afficher dans un Label en cliquant su un bouton. Pourquoi l'interface tkinter ne sert pas aussi (et en à la place de la console) à rentrer les informations demandées (à l'aide d'Entry par exemple)

          • Partager sur Facebook
          • Partager sur Twitter
            12 avril 2021 à 18:41:33

            Merci ! 

            Oui je veux aussi que les autres infos soient rentrées dans l'interface mais pour l'instant je m'occupais juste de générer le poème sans le faire avec des entry, c'est la première fois que j'utilise tkinter donc j'essaie d'y aller étape par étape :)

            Encore une fois merci je vais continuer à essayer

            PS : Merci pour la coquille :,)

            • Partager sur Facebook
            • Partager sur Twitter

            Affichage résultat fonction avec 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