2016-09-28 86 views
0

這是Python 3.5.2使用John Zelle的代碼問題graphics.py如何用Zelle圖形重繪圖形?

我花了很多時間在這裏尋找答案,但只是無法弄清楚。功能undraw()就像getMouse()一樣存在。但它似乎不適用於plot()命令,只有draw()命令。我究竟做錯了什麼?我怎樣才能保持窗口打開,但在下一個繪製之前擦除之前的繪圖?

graphics功能的PDF文檔:

        http://mcsp.wartburg.edu/zelle/python/graphics/graphics.pdf

win = GraphWin("Plot",500,500) # Creates a window 

for m in range(0,j): # Loop for each function 
    # Randomizes a color for each function 
    color = random.choice(['red','black','green','yellow','pink','blue']) 
    for h in range(0,t): # Loop for each pair of values "x,y" 
     # Find points and plot each point in win 
     win.plot(axis[h],points[m][h],color) 
    win.getMouse() # Pause before clicking 
    win.undraw() # AttributeError: 'GraphWin' object has no attribute 'undraw' 
+1

沒有足夠的信息...所以+關閉現在。添加如下內容:什麼語言?什麼庫? 「win」究竟是什麼以及它的定義/聲明在哪裏? – Spektre

回答

0

的第一個問題是,undraw()GraphicsObject,不GraphWin的方法,所以win.undraw()簡直是不正確。

第二個問題是plot()是一種低級別的像素設置方法,它不跟蹤它在Zelle圖形級別所做的操作,與繪製的對象不同。

然而,託底是Tkinter的這會跟蹤它繪製的對象,並GraphWin是Canvas的子類,所以你可以這樣做:

win = GraphWin("Plot", 500, 500) # Creates a window 

for m in range(j): # Loop for each function 
    color = random.choice(['red', 'black', 'green', 'yellow', 'pink', 'blue']) # Randomizes a color for each function 
    for h in range(t): # Loop for each pair of values "x, y" 
     win.plot(axis[h], points[m][h], color) # Find points and plot each point in win 
    win.getMouse() # Pause before clicking 
    win.delete("all") # Clear out old plot 
+0

我認爲如果你指出'win.delete(「all」)'調用繼承的'Canvas.delete()'方法(並將特殊的預定義標籤''all'''傳遞給它),你的答案會更清晰。人們可能沒有意識到'GraphWin'沒有自己定義的那個名字的方法。 – martineau