Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tkinter : résultat dans une nouvelle fenêtre

    20 avril 2016 à 16:13:03

    Bonjour a tous,

    Voila mon problème. J'ai une partie de mon programme effectuant un calcul, de la forme suivante :

    def frequence(liste,h):
        f0=freq(liste[0],h)
        f2=freq(liste[2],h)
        if (type(f0)==float) and (type(f2)!=float):
            f=f0
            f=round(f,2)
            print('Fréquence = ',f," Hz")
        elif (type(f2)==float) and (type(f0)!=float):
            f=f2
            f=round(f,2)
            print('Fréquence = ',f," Hz")
        elif(type(f0)==float) and (type(f2)==float):
            f=(f0+f2)/2
            f=round(f,2)
            print('Fréquence = ',f," Hz")
        else:
            print("Calcul de frequence impossible : intervalle de temps trop faible ou mouvement non periodique !")

    et je voudrai que ce résultat, les "print" s'affichent dans une nouvelle fenêtre. Juste une fenêtre avec ces messages.

    Voici (plus loin dans mon programme) l'affichage :

    b=frequence(a,float(reso.get()))
    b= StringVar()
    
    FREQUENCE = Tk()
    labl= Label(FREQUENCE,textvariable=b.get())
    labl.pack

    Hors, la fenêtre s'ouvre bien, mais vide. Voyez vous mon erreur et, surtout, comment faire ?

    Merci de vos réponses :)



    • Partager sur Facebook
    • Partager sur Twitter
      20 avril 2016 à 16:24:47

      labl.pack() # <= avec des parenthèses
      • Partager sur Facebook
      • Partager sur Twitter
        20 avril 2016 à 16:27:06

        Alors effectivement c'était une erreur de ma part. Mais la fenêtre n'affiche toujours rien, vide. :/
        • Partager sur Facebook
        • Partager sur Twitter
          20 avril 2016 à 16:29:10

          peut-être parce que la fonction frequence ne retourne rien ?
          • Partager sur Facebook
          • Partager sur Twitter
            20 avril 2016 à 16:33:40

            Il en retourne bien un mais uniquement dans la console  :

            Fréquence =  0.22  Hz


            • Partager sur Facebook
            • Partager sur Twitter
              20 avril 2016 à 16:36:53

              Désolé pour la réponse décousue ...

              # tu affectes le résultat de frequence() à b :
              b = frequence(a,float(reso.get()))
              
              # mais ici est-ce que tu ne réinitialises pas b ?
              b = StringVar()
              


              EDIT : vérification faite, en effet quand tu fais b = StringVar() tu affectes à b un nouvel objet StringVar vide.

              >>> import tkinter as tk
              # etc
              >>> a = "Bonjour"
              >>> b = tk.StringVar()
              >>> b.set(a)
              >>> b.get()
              'Bonjour'



              -
              Edité par noobien 20 avril 2016 à 16:50:11

              • Partager sur Facebook
              • Partager sur Twitter
                20 avril 2016 à 16:42:57

                Ya pas de soucis je suis très reconnaissant de prendre de ton temps pour m'aider !

                Le problème c'est que si jamais je ne le fais pas, ou même que je mets 

                b=StringVar()
                b=frequence(a,float(reso.get()))

                dans cet ordre, j'ai cette erreur :

                labl= Label(FREQUENCE,textvariable=b.get())

                AttributeError: 'NoneType' object has no attribute 'get'



                -
                Edité par GrégoireBréget 20 avril 2016 à 16:43:38

                • Partager sur Facebook
                • Partager sur Twitter
                  20 avril 2016 à 16:58:04

                  il en retourne bien un mais uniquement dans la console

                  Euh non ta fonction ne retourne rien, elle fait des print mais ne comporte pas d'instruction return. Du coup quand tu fais b = frequence(...) tu vas voir tes print affichés en console, mais b ne contient rien d'autres que les appels aux fonctions print. Et tu ne peux pas "afficher les print" dans une nouvelle fenêtre ; par contre afficher le contenu de variables, oui.

                  >>> def dire(mot):
                  ...    print(mot)
                  ...
                  >>> foo = dire("bonjour")
                  bonjour
                  >>> print(foo)
                  None    # foo ne "contient" rien

                  Si je n'avais pas lu ton post en diagonale je l'aurais vu de suite... :)

                   La même avec return :

                  >>> def dire(mot):
                  ...    return mot
                  ...
                  >>> foo = dire("bonjour")
                  >>> foo
                  'bonjour'
                  



                  -
                  Edité par noobien 20 avril 2016 à 17:01:43

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 avril 2016 à 20:24:46

                    ça marche !!!! Merci beaucoup !! Effectivement c'était vraiment tout bête, du débutant... --'

                    Encore merci !!

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Tkinter : résultat dans une nouvelle fenêtre

                    × 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