如何在tkin中配置标签

2024-04-25 17:41:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这几行代码在tkinter中发送邮件,我想做的是用sending in progress...来配置标签,当邮件正在发送,但是标签没有配置,直到错误被输出时才配置标签。在

我希望标签配置邮件发送完成后配置mail sent

from tkinter import messagebox
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import socket
import tkinter as tk




def my_second_mail():
    try:

        l.config(text="sending  in progress...")


        FROMADDR = "my@gmail.com"
        PASSWORD = "22@201"

        TOADDR = ['@yahoo.com', '@gmail.com']
        CCADDR = ['fkfkf@gmail.com']

        # Create message container - the correct MIME type is multipart/alternative.
        msg = MIMEMultipart('alternative')
        msg['Subject'] = 'BACK UP FILES'
        msg['From'] = FROMADDR
        msg['To'] = ', '.join(TOADDR)
        msg['Cc'] = ', '.join(CCADDR)

        body = "mail test"
        msg.attach(MIMEText(body, 'plain'))

        filename = ['facebook.png']

        for n in filename:
          #  l.config(text="sending  in progress...")
            print(n)
            attachment = open(str(n), 'rb')


            part = MIMEBase('application', 'octet-stream')
            part.set_payload((attachment).read())
            encoders.encode_base64(part)
            part.add_header('Content-Disposition', "attachment; filename= " + n)

            msg.attach(part)
            server = smtplib.SMTP('smtp.gmail.com', 587)
            server.starttls()
            server.login(FROMADDR, PASSWORD)

            server.sendmail(FROMADDR, TOADDR + CCADDR, msg.as_string())
            server.quit()


        messagebox.showinfo("success", "mail sent", parent=root)

        l.config(text="mail sent...")


    except socket.gaierror:
        messagebox.showerror("no internet", "no internet connectivity")



root = tk.Tk()
root.geometry("600x400")

canvas = tk.Canvas(root, width=200, height=200, background="dodger blue")
canvas.pack(fill="both", expand=True)

l = tk.Label(canvas, bg="dodger blue",  fg="white")
l.place(x=250, y=20)

b= tk.Button(canvas, text="send mail", command=my_second_mail, width=25, fg='dodger blue')
b.place(x=220, y=330)

root.mainloop()

Tags: textinfromimportcomserveremailmail
1条回答
网友
1楼 · 发布于 2024-04-25 17:41:14

添加update调用。在

l.config(text="sending  in progress...")
l.update()

这将满足您的需要,但GUI在发送过程中仍将被锁定。要做到正确,您应该将发送进程移动到一个新线程,并通过StringVar更新标签。完全未经测试的猜测:

^{pr2}$

相关问题 更多 >