Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation de tkinter et concatenation de str

    24 juillet 2023 à 23:06:38

    Bonjour, alors voila je tente de faire un projet en python de recherche de pseudo sur plusieurs site web à la fois, à l'image de certains site. Mais je suis confronté à plusieurs problèmes que je n'arrive pas à résoudre malgré plusieurs heures de recherches acharnées. 

    J'ai donc 3 fichiers python distincts permettant un bon fonctionnement de mon outil, mais il y a quelques poblèmes... 

    J'ai donc premieement le message d'erreur ci dessous qe je n'arrive pas à comprendre : en effet la console me dit que je ne peux pas concatener deux chaines de characteres, ce qui m'intrigue. De plus dans le fichier main.py je n'arrive pas à récuprer le pseudo à l'aide de ma fonction get_entry_text() seulement après avoir cliqué sur le bouton : il ne me renvoie que la valeur de base de l'input qui est "Entrez votre texte ici".

    Si quelqu'un aurait des conseils ou des solutions, je suis preneur. Merci beaucoup d'avopir lu cela, en esperant que vous pourrez m'aider.

    PS : Voici les 3 fichiers python et les messages d'erreur.:)

    main.py 

    from tkinter import *
    from Fonctionnement import *
    
    pseudo = ""
    # Creation de la fenetre
    fenetre = Tk()
    fenetre.title("Outil de recherche de pseudo")
    #Definition de la taille de la fenetre
    fenetre.geometry("1000x700")
    
    
    def on_entry_click(event):
        if entry.get() == "Entrez votre texte ici":
            entry.delete(0, "end") # Efface le texte en fond
            entry.config(show='') # Affiche le texte saisi
            entry.config(fg='black')  # Changement de la couleur du texte saisi en noir
    
    def on_focus_out(event):
        if entry.get() == "":
            entry.insert(0, "Entrez votre texte ici")
            entry.config(show='*') # Cache le texte en fond en remettant le caractère de remplacement (ici '*')
            entry.config(fg='grey')  # Changement de la couleur du texte en fond en gris
    
    def get_entry_text():
        if entry.get() != "Entrez votre texte ici":
            pseudo = entry.get()
            return pseudo
    
    
    # Texte en fond initial
    default_text = "Entrez votre texte ici"
    
    # Création de l'Entry() avec le texte en fond
    entry = Entry(fenetre, show='', fg='grey')
    entry.insert(0, default_text)
    entry.bind("<FocusIn>", on_entry_click)
    entry.bind("<FocusOut>", on_focus_out)
    
    
    button = Button(fenetre, text="Récupérer le texte", command=get_entry_text)
    
    
    
    entry.pack(padx=10, pady=10)
    button.pack(pady=5)
    
    print(test_reseaux(get_entry_text()))
    fenetre.mainloop()
    Reseaux.py
    liste_des_reseaux = {
        "tiktok": "https://tiktok.com/@",
        "instagram": "https://instagram.com/"
    }
    Fonctionnement.py
    import requests
    from Reseaux import liste_des_reseaux
    
    def test_reseaux(pseudo_test):
        for i in liste_des_reseaux.values():
            lien = i + pseudo_test
        
            reponse = requests.get(lien)
        
            if reponse.status_code == 200:
                print(f"L'utilisateur existe, accedez à son compte via ce lien : \n{lien}")
        
            else:
                print("L'utilisateur n'existe pas")
    Message d'erreur


    -
    Edité par GerardDupond 24 juillet 2023 à 23:07:36

    • Partager sur Facebook
    • Partager sur Twitter
      25 juillet 2023 à 10:02:19

      ton erreur est lié à ton problème d'entry. et aussi du fait que ta ligne 47 est faite en dehors de la "boucle" d'affichage et de ce fait le texte de ton entry à ce moment c'est ton texte par défaut, et ta fonction dans ce cas ne renvoie rien puisqu'on ne rentre pas dans le if de celle-ci.

      Le seul moment où tu va récupérer le pseudo c'est dans le click du bouton, donc c'est de là que tu pourras lancer ton autre fonction test_reseaux

      • Partager sur Facebook
      • Partager sur Twitter
        25 juillet 2023 à 18:06:09

        umfred a écrit:

        ton erreur est lié à ton problème d'entry. et aussi du fait que ta ligne 47 est faite en dehors de la "boucle" d'affichage et de ce fait le texte de ton entry à ce moment c'est ton texte par défaut, et ta fonction dans ce cas ne renvoie rien puisqu'on ne rentre pas dans le if de celle-ci.

        Le seul moment où tu va récupérer le pseudo c'est dans le click du bouton, donc c'est de là que tu pourras lancer ton autre fonction test_reseaux


        Deja merci de m'avoir répondu. Ensuite tu dis "ta ligne 47 est faite en dehors de la "boucle" d'affichage", sauf que j'ai mis fenetre.mainloop() ligne 48, je ne vois donc pas où ce termine ma boucle d'affichage si ce n'est ici. De plus comment puis-je lancer la fonction get_entry_text() et la fonction test_reseaux() en un seul bouton ? Même en recherchant je n'arrive pas à trouver de solution viable. Et à la base ma fonction get_entry_text servait justement à me permettre d'utiliser le texte entré dans l'Entry en dehors, et de ne pas être limité à devoir utiliser ma fonction dans une partie précise de mon code.

        • Partager sur Facebook
        • Partager sur Twitter
          25 juillet 2023 à 18:20:40

          GerardDupond a écrit:

          Deja merci de m'avoir répondu. Ensuite tu dis "ta ligne 47 est faite en dehors de la "boucle" d'affichage", sauf que j'ai mis fenetre.mainloop() ligne 48, je ne vois donc pas où ce termine ma boucle d'affichage si ce n'est ici.

          Cette boucle ne commence qu'après l'appel à mainloop: avant, aucune chance pour que l'utilisateur ait modifié l'entry

          GerardDupond a écrit:

          De plus comment puis-je lancer la fonction get_entry_text() et la fonction test_reseaux() en un seul bouton ?

          get_entry_text peut appeler test_reseaux... mais une interface graphique à un modèle de programmation qui n'est pas séquentiel. Ce n'est pas intuitif et il y a des tutos pour apprendre à faire avec! Impssible de dire "je veux" et que ça marche tout seul, il faut mettre les choses en forme pour faire avec.

          -
          Edité par mps 25 juillet 2023 à 18:22:08

          • Partager sur Facebook
          • Partager sur Twitter
            25 juillet 2023 à 18:24:57

            Justement, le mainloop c'est l'affichage, donc ce qui est fait avant est fait avant affichage; il faut passer par des événements (dont le clic sur le bouton qui effectue une lecture de ton entry, donc après avoir cette entry, tu peux lancer ta fonction test_reseaux avec la valeur lue)

            Pour réexprimer le but de ta fenêtre, c'est de lancer la recherche du pseudo après l'avoir saisie et cliquer sur le bouton (il faut donc que la fenêtre soit affichée pour pouvoir interagir avec)

            Donc ton main.py

            from tkinter import *
            from Fonctionnement import *
             
            pseudo = ""
            # Creation de la fenetre
            fenetre = Tk()
            fenetre.title("Outil de recherche de pseudo")
            #Definition de la taille de la fenetre
            fenetre.geometry("1000x700")
             
             
            def on_entry_click(event):
                if entry.get() == "Entrez votre texte ici":
                    entry.delete(0, "end") # Efface le texte en fond
                    entry.config(show='') # Affiche le texte saisi
                    entry.config(fg='black')  # Changement de la couleur du texte saisi en noir
             
            def on_focus_out(event):
                if entry.get() == "":
                    entry.insert(0, "Entrez votre texte ici")
                    entry.config(show='*') # Cache le texte en fond en remettant le caractère de remplacement (ici '*')
                    entry.config(fg='grey')  # Changement de la couleur du texte en fond en gris
             
            def get_entry_text():
                if entry.get() != "Entrez votre texte ici":
                    pseudo = entry.get()
                    test_reseaux(pseudo)
             
             
            # Texte en fond initial
            default_text = "Entrez votre texte ici"
             
            # Création de l'Entry() avec le texte en fond
            entry = Entry(fenetre, show='', fg='grey')
            entry.insert(0, default_text)
            entry.bind("<FocusIn>", on_entry_click)
            entry.bind("<FocusOut>", on_focus_out)
             
             
            button = Button(fenetre, text="Récupérer le texte", command=get_entry_text)
             
             
             
            entry.pack(padx=10, pady=10)
            button.pack(pady=5)
             
            fenetre.mainloop()
            

            de plus, ta fonction test_reseaux ne renvoie rien, elle fait elle-même un affiche avec les print.

            • Partager sur Facebook
            • Partager sur Twitter

            Utilisation de tkinter et concatenation de str

            × 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