gpt4 book ai didi

python - 发送电子邮件时 TTK 进度条被阻止

转载 作者:行者123 更新时间:2023-12-03 13:00:51 28 4
gpt4 key购买 nike

我正在使用 tkinter 在 python 中编写一个应用程序。在这个应用程序中,我正在尝试发送一批电子邮件,并且我想在发送它们时显示一个进度条。我能够创建进度条并启动它,但是当发送电子邮件时,进度条停止移动(如果它在发送电子邮件之前启动,我想在发送电子邮件之前启动进度条,但是当我这样做时,它只是挂起,没有任何东西在酒吧上移动。

startProgressBar()
sendEmails()
stopProgressBar()

我曾尝试将电子邮件发送到一个单独的线程中,但我似乎没有任何运气。我正在使用高级线程模块。有什么建议吗?也许我没有得到正确的线程部分。我正在使用 smtplib 发送电子邮件。

最佳答案

这是一个老问题,但我所指的代码配方帮助我提出了类似的概念,所以我认为应该分享它。

这种类型的问题需要使用线程,这样我们就把更新 GUI 和执行实际任务(例如发送电子邮件)的工作分散了。看看这个code recipe来自 Active State,我相信这正是您正在寻找的线程和线程之间传递信息的示例(通过队列)。

我试图突出代码配方中的重要部分。我不包括设置进度条本身,而是包括整体代码结构和获取/设置队列。

import Tkinter
import threading
import Queue

class GuiPart:
def __init__(self, master, queue, endCommand):
self.queue = queue
# Do GUI set up here (i.e. draw progress bar)

# This guy handles the queue contents
def processIncoming(self):
while self.queue.qsize():
try:
# Get a value (email progress) from the queue
progress = self.queue.get(0)
# Update the progress bar here.

except Queue.Empty:
pass

class ThreadedClient:
# Launches the Gui and does the sending email task
def __init__(self, master):
self.master = master
self.queue = Queue.Queue()

# Set up the Gui, refer to code recipe
self.gui = GuiPart(master, self.queue, ...)

# Set up asynch thread (set flag to tell us we're running)
self.running = 1
self.email_thread = threading.Thread(target = self.send_emails)
self.email_thread.start()

# Start checking the queue
self.periodicCall()

def periodicCall(self):
# Checks contents of queue
self.gui.processIncoming()
# Wait X milliseconds, call this again... (see code recipe)

def send_emails(self): # AKA "worker thread"
while (self.running):
# Send an email
# Calculate the %age of email progress

# Put this value in the queue!
self.queue.put(value)

# Eventually run out of emails to send.
def endApplication(self):
self.running = 0


root = Tkinter.Tk()
client = ThreadedClient(root)
root.mainloop()

关于python - 发送电子邮件时 TTK 进度条被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8612326/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com