Recuperer string saisi tkinter envoi de mail

Résolu/Fermé
codeur782 - Modifié le 17 mars 2022 à 14:33
mamiemando Messages postés 33091 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 17 mars 2022 à 14:39
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
A voir également:

1 réponse

mamiemando Messages postés 33091 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 751
Modifié le 18 mars 2022 à 17:37
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