2013-10-25 19 views
0

我有一個調用此類的drawWorld()函數的外部腳本。 我希望繪圖顯示1-2秒,然後關閉,控件返回到主腳本。 我可以設法讓窗口消失與線Tkinter窗口將被關閉並且控制流將自動返回

root.after(1000, lambda: root.destroy()) 

,但我不能返回流向主腳本。 我試過

root.after(1000, lambda: root.quit()) 

但它不起作用。

這是我對Tkinter的類代碼:

from Tkinter import Tk, Canvas, Frame, BOTH 

class World(Frame): 

def __init__(self, parent): 
    Frame.__init__(self, parent) 
    self.parent = parent    
    self.parent.title("CliffWorld")   
    self.pack(fill=BOTH, expand=1) 

    canvas = Canvas(self)   

    canvas.create_rectangle(4, 4, 31, 31, 
     outline="#f11", fill="#1f1", width=1) 
    canvas.pack(fill=BOTH, expand=1) 


def drawWorld(): 
    root = Tk() 
    ex = World(root) 
    root.geometry("330x220+300+300") 
    root.after(1000, lambda: root.destroy()) 
    root.after(1000, lambda: root.quit()) 
    root.mainloop() 
+0

什麼是「我無法將流程返回到主腳本」和「但它不起作用」。意思?它會崩潰嗎?程序是否掛起?你會收到錯誤消息嗎?你能提供一個最小的腳本來說明完整的問題 - 調用這個函數的程序代碼,然後在函數退出時嘗試繼續嗎? –

+0

主腳本調用drawWorld()函數,因此控制流程轉移到代碼的這一部分。 我使用root.destroy()來刪除窗口,它的工作原理,而應該退出tk環境(並讓腳本的其餘部分運行)的root.quit()不會。 我很抱歉沒有指定,但我的意思是不工作=不退出。 基本上它保持打開,直到我手動退出(Ctrl-C)。 我的外部代碼很簡單: 'import tkWorld tkWorld.drawWorld();打印「結束」 我無法進入打印行。 我想讓tk窗口彈出並在1s後死亡。 – Alvin

+0

您的縮進在您的示例中不正確。 –

回答

0

在你的問題你寫你的主計劃僅僅是這樣的評論:

import tkWorld 
tkWorld.drawWorld() 
print "end" 

當我使用一個程序中,並使用您的示例代碼(修復縮進後),它工作正常。我看到窗戶出現一秒鐘,它消失了,我發送打印在控制檯上的「結束」。

它可以工作,無論lambda是否調用root.quit()root.destroy()

from Tkinter import Tk, Canvas, Frame, BOTH 

class World(Frame): 

    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent    
     self.parent.title("CliffWorld")   
     self.pack(fill=BOTH, expand=1) 

     canvas = Canvas(self)   

     canvas.create_rectangle(4, 4, 31, 31, 
      outline="#f11", fill="#1f1", width=1) 
     canvas.pack(fill=BOTH, expand=1) 


def drawWorld(): 
    root = Tk() 
    ex = World(root) 
    root.geometry("330x220+300+300") 
    root.after(1000, lambda: root.destroy()) 
    root.after(1000, lambda: root.quit()) 
    root.mainloop() 

if __name__ == "__main__": 
    import tkWorld 
    tkWorld.drawWorld() 
    print "end" 
+0

謝謝布萊恩,我從另一臺機器嘗試過它,它的工作原理。 我現在有點擔心我的問題是什麼。 謝謝反正! – Alvin