2015-04-26 171 views
1

我正試圖在Python 3中使用tkinter創建一個簡單的移動塊,並且一切都在工作,直到我導入時間。窗口現在不會打開。我嘗試刪除導入,並沒有幫助。這是我的代碼:Tkinter窗口沒有打開

from tkinter import * 
import time 

canvas_height = 400 
canvas_width = 600 
canvas_colour = "grey50" 
moveBoolean = "True" 

def move(): 
    global moveBoolean 
    while moveBoolean == "True": 
     time.sleep(0.005) 
     canvas.move(square, 90, 90) 
     time.sleep(0.005) 
     canvas.move(square, 180, 180) 
     time.sleep(0.005) 
     canvas.move(square, 50, 100) 

window = Tk() 

canvas = Canvas(bg=canvas_colour, height=canvas_height, width=canvas_width, highlightthickness=0) 
canvas.pack() 

square = canvas.create_rectangle(50, 50, 50, 50, width=50, fill="black") 

move() 

window.mainloop() 

回答

0

這些問題通常是使用的類,你應該學習和編碼的GUI恕我直言,在使用前解決。你不應該使用time(),因爲它會中斷無限的Tkinter循環。使用Tkinter的after()代替。此外,你從來沒有將moveBoolean設置爲False,所以while語句一直運行,直到程序被取消,並且第二次通過方塊將離開畫布,這就是爲什麼你沒有看到任何東西。以下解決您的問題,但如果使用了班級結構,再次會更好。

from tkinter import * 
from functools import partial 

canvas_height = 400 
canvas_width = 600 
canvas_colour = "grey50" 
moveBoolean = "True" 

def move_it(ctr=0): 
    if ctr < len(coords): 
     x, y = coords[ctr] 
     ctr += 1 
     print ctr, x, y 
     canvas.move(square, x, y) 
     window.after(1000, partial(move_it, ctr)) 

window = Tk() 

canvas = Canvas(bg=canvas_colour, height=canvas_height, 
     width=canvas_width, highlightthickness=0) 
canvas.pack() 

square = canvas.create_rectangle(50, 50, 50, 50, width=50, fill="black") 

coords = ((90, 90), 
      (180, 180), 
      (50, 50)) 
move_it() 

window.mainloop() 
+0

腳本似乎不喜歡 'window.after(1000,部分(移動,CTR))',投擲錯誤:AttributeError的: 'functools.partial' 對象沒有屬性 '__name__' – Tree

+0

將函數「move()」重命名爲不太常見的東西,因爲它可能是程序在查找函數之前發現了其他「移動」(上面編輯的代碼)。你使用的是什麼操作系統和Python版本? –

+0

我正在使用最新的3.4版本 – Tree