2016-10-11 54 views
0

我使用Python 3.2.3Python的龜圖紙更新的turtle.tracer(0,0)

當我跑在Python IDLE模塊是新手,烏龜畫一個正方形,沒有任何更新屏幕上,所以窗口顯示爲空白,並且在我輸入任意鍵後,由於turtle.update()的調用,出現了龜和方塊。

但是,當我在文檔中雙擊存儲以下代碼的.py文件並直接執行它時,在我輸入任何鍵之前,方塊總是顯示出來。

有趣的部分是,烏龜沒有顯示,但只有廣場顯示。

即使我已經將龜示蹤器設置爲(0,0),看起來只有在繪製後的廣場上纔有龜更新。

這是否被視爲一個錯誤,我該如何解決它?謝謝您的幫助。

import turtle 
 

 
def drawSquare(): 
 
    turtle.down(); 
 
    turtle.begin_fill(); 
 
    turtle.goto(10, 0); 
 
    turtle.goto(10, 10); 
 
    turtle.goto(0, 10); 
 
    turtle.goto(0, 0); 
 
    
 
    turtle.end_fill(); 
 
    turtle.up(); 
 

 
def tUpdate(): 
 
    turtle.update(); 
 

 
turtle.tracer(0,0); 
 
drawSquare(); 
 
input("Not updated. Press any key."); 
 
tUpdate(); 
 
print("Updated"); 
 
turtle.mainloop();

回答

1

你有幾件事情對你的工作:爲tracer()窮人documenation和發生end_fill()up()事業更新的事實。 tracer()並不是真的意味着在用戶準備好顯示它們之前將東西隱藏起來 - 這是一種速度優化,因此用戶不必在複雜的圖像中查看每個繪圖步驟。您無法完全控制更新何時發生。

下面是您的示例的返工,顯示您想要的行爲,而不再是一個填充正方形。我換你input()觸發的窗口,而不是用鼠標點擊,但是你的做法會很好的工作在這裏太:

from turtle import Turtle, Screen 

def drawSquare(turtle): 
    turtle.goto(100, 0) 
    turtle.goto(100, 100) 
    turtle.goto(0, 100) 
    turtle.goto(0, 0) 

screen = Screen() 

screen.tracer(0, 0) 

screen.onclick(lambda x, y: screen.update()) 

turtle = Turtle() 

drawSquare(turtle) 

screen.mainloop() 

我還做了哪些是龜方法,哪些是屏幕的方法,更加明確。爲了便於使用,烏龜圖書館開始的程序員友好設計趨於模糊這些。

+0

它的工作原理。解釋確實使許多概念更清晰。謝謝您的回答! – eaglebrain

+0

還有一些我不明白的地方。正如我之前提到的,烏龜沒有顯示,但直接運行舊代碼時只顯示了方塊。顯然,由end_fill()和up()引起的更新只能更新「繪圖」。爲什麼? – eaglebrain

+0

@dazedbrain,我明白,我同意它很混亂。我只能猜測**填充**的性質明顯不同於**繪圖**,並且影響我們所看到的結果。 – cdlane