2017-04-24 68 views
-2

我正在使用Python創建一個電子郵件客戶端,並且遇到了有關代碼格式的輕微問題。我使用的庫imaplib和Tkinter的(GUI)在定義它們之前調用Python變量

我有這樣的代碼片段,顯示在列表框中的電子郵件:所以現在我想確定我在這裏做lb_leftclick_handler

for i in range(latest_eid, latest_eid-15, -1): 
     i = str (i) #This block of code loads the 15 most recent emails 
     typ, data = mail.fetch(i, '(RFC822)') 

     for response_part in data: 
      if isinstance(response_part, tuple): 
       msg = email.message_from_string(response_part[1].decode('UTF-8'))#Converts the content of the email data to string 
       eSubject = msg['subject']#Variable for the subject of each email 
       eFrom = msg['from']#Variable for the sender of each email 

     eFrom = eFrom.replace('<','') 
     eFrom = eFrom.replace('>','')#Deleting the < & > from the senders email 

     if len(eSubject) > 30: 
      eSubject = eSubject[0:28] + '...' #Load only the first 30 characters of the subject 


     lb = Listbox(rootA) #Listbox to show the emails in the gui 
     lb.pack() 

     lb.insert(END, 'From: (' + eFrom.split()[-1] + ') Subject:' + eSubject) 
     lb.configure(background='black', fg='white', height=2, width=85, font=('Arial', 10)) 
     lb.bind('<Double-Button-1>', lb_leftclick_handler) 

def lb_leftclick_handler(msg): 
    rootB = Tk() 
    rootB.title('Email') 
    rootB.configure(background='black') 
    bodyL = Label(rootB, text='(RFC822)') 
    bodyL.configure(background='black', fg='white') 

基本上我的問題是,我想加載我在第一個代碼片段注入我的代碼的第二窗口創建窗口解析的電子郵件數據。由於Python是如何格式化的,def lb_leftclick_handler必須在被調用之前放置,但是,我不能將數據加載到窗口中,因爲它還不存在。有沒有解決方法?如果這個問題的措詞很糟糕,我很抱歉。

+0

只需使用類。他們非常甜美,而且很有力量,在班上這些命令等等無關緊要。 –

+0

如果你的代碼段出現在一個函數中,只要確保'lb_leftclick_handler'在該函數被調用*之前被定義。如果它不在函數中,那應該是。 – chepner

回答

-1

Python正在解釋代碼。如果未被調用,它將不執行該功能。您可以安全地將上面的功能代碼放在上面,以便在您調用它時定義,當您調用它時,它將獲得所需的所有數據。

+0

感謝您的答案,我甚至沒有考慮過它可以放在列表框之前,是否有一種方法可以在列表框中選擇哪個項目,以便正確的主題/正文可以加載? – Imminence

+0

我從來沒有使用過Tkinter。在文檔中看到,必須有東西來查看哪一個被檢查。 –

相關問題