私は現在、Pythonのtkinterライブラリを使用して、電子メールの送信者と受信プログラムに取り組んでいます。スレッド モジュールを使用して、プログラムで未読のメールを 60 秒ごとに更新するようにしていますが、プログラム内で作業を続けることができます。
スレッド モジュールは、print("something") コマンドを作成するだけで機能し、プログラム内で作業を続けることができます。ただし、gmail にスレッド ログを作成し、未読メール数を取得すると、プログラム全体がフリーズしてクラッシュします。
以下は私のコードのスニペットです。完全なコードは投稿しません。どのように見えるかを示す短いバージョンを作成しました。
編集:機能に小さな誤りを作りました。get_credentials() は削除されました。
import tkinter, re, threading, time, imaplib, too many to list here.
class Application(Frame):
def __init__(self, parent):
... Start some functions
... Create some widgets
... Create some global stringvars for entry fields
def threadrefresh(self):#I want to start this function when a button is clicked
def multithreading():
usernamevar = "Username"
passwordvar = "Password"
obj = imaplib.IMAP4_SSL('imap.gmail.com', '993') #connect to gmail
obj.login(usernamevar, passwordvar) #log in
obj.select() #select the inbox
unread = str(len(obj.search(None, 'UnSeen')[1][0].split())) #get the total unread
print(unread)
obj.close()
time.sleep(3)
multi = threading.Thread(target=multithreading)
multi.start()
multi = threading.Thread(target=multithreading)
multi.start()
def other_functions_that_do_not_matter_in_this_case():
... Creating GUI
... Sending mail
... Etc.
... Create a button with function call self.threadrefresh
def main():
root = Tk()
app = Application(root)
root.mainloop()
if __name__ == '__main__':
main()