Recuperer string saisi tkinter envoi de mail

Résolu
codeur782 -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je développe un programme en python avec interface graphique
tkinter
afin d'envoyer des emails. (Je débute avec
tkinter
). L'envoi d'email seul fonctionne en console avec un input pour le message à envoyer. En GUI, j'aimerais récupérer dans une variable le message afin de l'envoyer par mail.

Code de la zone de texte :

tx = tkinter.Text(root)
tx.place(x=50, y=30, width=200, height=100)


Code pour le mail :

server.sendmail(sent_from, to)


Dans l'idéal, après "to", j'aimerais ajouter "msg" pour la variable contenant la string saisie.

Merci d'avance

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Explication du problème

    Sans boucle d'événement, ton interface
    tkinter
    ne peut pas marcher. Je t'invite donc à regarder l'exemple et à l'adapter à tes besoins.

    Dans l'idée, il faut créer une (ou plusieurs) zone(s) de texte (destinataire, sujet, message, ...) comme dans un client mail normal, un bouton pour envoyer, et faire en sorte que ton interface réagisse quand on clique sur le bouton (soit à l'aide du paramètre
    command
    , soit à l'aide de
    bind
    ) pour déclencher le code pour envoyer l'email construit à partir des valeurs saisies dans la ou les zones de texte, puis lancer la boucle d'événement, voir
    mainloop
    ).

    Comment résoudre ton problème

    Voici un exemple minimal (récupéré depuis ce lien) :

    import tkinter as tk
    root = tk.Tk()
    
    def callback(x):
        print('button', x)
    
    tk.Button(text='Button 1', command=lambda : callback(1)).pack()
    tk.Button(text='Button 2', command=lambda : callback(2)).pack()
    tk.Button(text='Button 3', command=lambda : callback(3)).pack()
    
    root.mainloop()


    Retour à ton problème

    Si on adapte l'exemple précédent à ton cas :

    import tkinter as tk
     
    def callback(root):
        text_from = root.entry_from.get()
        text_to = root.entry_to.get()
        text_sub = root.entry_sub.get()
        text_msg = root.entry_msg.get()
        print(f"""
        From: {text_from}
        To: {text_to}
        Sub: {text_sub}
        Msg: {text_msg}""")
                        
    root = tk.Tk()      
                        
    root.entry_from = tk.Entry(root, width=10)
    root.entry_from.insert(tk.END, "titi@gmail.com")
    root.entry_from.pack()
    root.entry_to = tk.Entry(root, width=10)
    root.entry_to.insert(tk.END, "toto@gmail.com")
    root.entry_to.pack()
    root.entry_sub = tk.Entry(root, width=10)
    root.entry_sub.insert(tk.END, "Subject")
    root.entry_sub.pack()
    root.entry_msg = tk.Entry(root, width=10)
    root.entry_msg.insert(tk.END, "Dear toto ... Best regards, titi")
    root.entry_msg.pack()
    root.button = tk.Button(text="Send", command=lambda: callback(root))
    root.button.pack()
    root.mainloop()


    Résultat (quand on clique sur le bouton) :

        From: titi@gmail.com
    To: toto@gmail.com
    Sub: Subject
    Msg: Dear toto ... Best regards, titi


    Bonne chance
    0