2016-03-08 75 views
1

我已經複製下面的代碼使用的Tkinter與動畫實驗:Python的Tkinter的window.mainloop()

from Tkinter import * 
window = Tk() 
canvas = Canvas(window, width = 400, height = 300) 
canvas.pack() 
x0 = 10 
y0 = 50 
x1 = 60 
y1 = 100 
i = 0 
deltax = 2 
deltay = 3 
which = canvas.create_oval(x0,y0,x1,y1,fill="red", tag='redBall') 
while True: 
    canvas.move('redBall', deltax, deltay) 
    canvas.after(20) 
    canvas.update() 
    if x1 >= 400: 
     deltax = -2 
    if x0 < 0: 
     deltax = 2 
    if y1 > 300: 
     deltay = -3 
    if y0 < 0: 
     deltay = 3 
    x0 += deltax 
    x1 += deltax 
    y0 += deltay 
    y1 += deltay 
window.mainloop() 

這工作得很好,但我已經注意到的是,它似乎工作同樣有和無該行window.mainloop()。此外,這條線似乎永遠不會被調用,因爲普遍的while循環從不中斷。不過,我已經多次看過這個示例代碼,所以看起來window.mainloop()確實執行了一些重要的事情。那個東西是什麼??

+1

因爲在它上面有一個無限的'while True:'循環,代碼永遠不會到'window.mainloop()'。通常你會使用'mainloop()'來啓動Tkinter事件處理程序,但是在這個'canvas.update()'中導致窗口在整個循環中被顯示和更新。 – Jkdc

回答

0

window.mainloop()不允許Python解釋器在該行之後執行代碼,直到應用程序關閉。例如,你可以在window.mainloop()之後添加一些打印語句,你會發現python在關閉你的應用程序後打印它們。

from Tkinter import * 
root=Tk() 
#your code here 
root.mainloop() 
#now print 
print 'Mainloop over' 

這樣的程序循環主循環使按鈕和其他部件進行多次內,否則程序將不會第一次執行後執行。