2

私は現在、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() 
4

1 に答える 1