Partage
  • Partager sur Facebook
  • Partager sur Twitter

Python : probleme avec liste deroulante tkinter

aucune valeur de retour avec la fonction get()

Sujet résolu
    12 décembre 2019 à 1:29:55

    Bonjour , 
    je développe un petit logiciel de gestion de stock , de facturation ...
    Je suis actuellement bloquer pour la gestion du stock j'ai un bouton dans ma fenêtre tkinter qui ouvre une nouvelle fenêtre demandant a utilisateur de rentre un type de marchandise ( dans un liste deroulante ) ainsi qu'un nombre (dans une zone de saisie de texte ) et enfin d'appuyer sur un bouton de validation.
    Mon problème est que quand j'appuie sur le bouton j'appelle un fonction avec le résultat de la liste déroulante ( par la fonction get ) et je la print (c'est pour le moment juste un test ) mais l'argument de ma fonction est vide et je ne comprend pas pourquoi , j'ai essayer de regarder si le programme passais bien dans la fonction et c'est bien le cas je ne voit donc pas d'ou viens le probleme !
    def add_in_stock(type):
        print(type)
    
    def ajouter_stock():
        add_window = tkinter.Tk()
        add_window.config(width = 500, height = 30)
        list_stock = ttk.Combobox(add_window, values=["thing 1","thing 2","thing 3"])
        nb_to_add = tkinter.Entry(add_window)
        validation = tkinter.Button (add_window, text = "Valider", command=add_in_stock(nb_to_add.get()))
        list_stock.place(x = 0, y = 0)
        nb_to_add.place(x = 200, y = 0)
        validation.place(x = 400, y = 0)
        add_window.mainloop()
    désole si mon explication n'est pas assez clair.
    merci d'avance de votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      12 décembre 2019 à 2:04:08

      Dans command, il faut une référence vers la fonction et pas un appel de la fonction, donc juste add_in_stock, sans les parenthèses derrière.
      • Partager sur Facebook
      • Partager sur Twitter
        12 décembre 2019 à 14:09:04

        Merci a toi , mais du coup comment je peut faire pour lui donner des argument lors de l'appel de la fonction ?
        • Partager sur Facebook
        • Partager sur Twitter
          12 décembre 2019 à 14:12:26

          Dans ta fonction callback avec une variable globale, c'est sans doute le plus simple surtout si tu débutes. Sinon, utilise une classe ou une fermeture mais ça demande davantage de connaissances.
          • Partager sur Facebook
          • Partager sur Twitter
            12 décembre 2019 à 14:33:12

            En effet ça doit être plus simple mais le problème c'est que je doit donc définir toute les fenêtre et widget en global pour les utiliser mais du coup ca veut dire que je vais avoir un gros impact mémoire lors de l'utilisation du programme ?

            sinon j'ai trouver cette solution temporaire mais plutot moche 

            def ajouter_stock():
            
                def add_in_stock():
                    print(list_stock.get())
            
            
                add_window = tkinter.Toplevel()
                add_window.title("Add_stock")
                add_window.config(width = 450, height = 30)
                list_stock = ttk.Combobox(add_window, values=["thing 1","thing 2","thing 3"])
                nb_to_add = tkinter.Entry(add_window)
                validation = tkinter.Button (add_window, text = "Valider", command=add_in_stock)
                list_stock.place(x = 0, y = 0)
                nb_to_add.place(x = 200, y = 0)
                validation.place(x = 400, y = 0)
                add_window.mainloop()



            -
            Edité par MaximeLeherle 12 décembre 2019 à 15:35:21

            • Partager sur Facebook
            • Partager sur Twitter

            Python : probleme avec liste deroulante 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