2014-03-01 30 views
1

我試圖把一個信息彈出窗口向用戶告知他正在創建一個文件,他必須等待它的創建,直到。我有一個master框架,它會創建一個popup窗口,其中顯示帶有消息的Progressbar。在系統上創建文件後,必須銷燬此popup窗口。保持Tkinter的進度運行,直到一個文件被創建

這是我的嘗試:

import os 
from Tkinter import * 
import ttk 

class UI(Frame): 
    def __init__(self,master): 
     Frame.__init__(self, master) 
     self.master = master 
     self.initUI() 

    def initUI(self): 
     popup = Toplevel(self) 
     txt = Label(popup, text="Please wait until the file is created").grid(row=0, column=0) 
     progressbar = ttk.Progressbar(popup, orient=HORIZONTAL, length=200, mode='indeterminate') 
     progressbar.grid(row=1, column=0) 
     progressbar.start() 

     self.checkfile() 

     progressbar.stop() 
     popup.destroy() 

    def checkfile(self): 
     while os.path.exists("myfile.txt") == False: 
      print "not created yet" 

if __name__ == "__main__": 
    root = Tk() 
    aplicacion = UI(root) 
    root.mainloop() 

的問題是,從使用者介面取得的凍結,我看不到任何窗口。我想我必須用Threads來解決這個問題吧?我是否需要製作兩個線程,一個用於UI,另一個用於checkfile函數,或者用一個就足夠了?

這將不勝感激,如果有人可以在Threads添加到我的代碼,使其工作,因爲我從來沒有使用它們,我完全失去了。

在此先感謝。

回答

1

while循環導致UI unreponsive。

使用Widget.after,而不是週期性checkfile方法。

def initUI(self): 
    self.popup = popup = Toplevel(self) 
    Label(popup, text="Please wait until the file is created").grid(
     row=0, column=0) 
    self.progressbar = progressbar = ttk.Progressbar(popup, 
     orient=HORIZONTAL, length=200, mode='indeterminate') 
    progressbar.grid(row=1, column=0) 
    progressbar.start() 
    self.checkfile() 

def checkfile(self): 
    if os.path.exists("myfile.txt"): 
     print 'found it' 
     self.progressbar.stop() 
     self.popup.destroy() 
    else: 
     print 'not created yet' 
     self.after(100, self.checkfile) # Call this method after 100 ms. 

什麼修改:

  • 使用after,而不是while循環。
  • 製造progressbar,使它們的實例屬性中checkfile方法popup訪問。
  • 移至progressbar.stoppopup.destroycheckfile方法。
+0

我有同樣的問題。什麼是'自我'?我根本找不到答案! –

+1

@LukeDinkler,我建議你閱讀[**類 - Python教程**](https://docs.python.org/2/tutorial/classes.html)。簡而言之,'self'是實例方法的第一個參數。 – falsetru

相關問題