2017-08-05 101 views
1

我有一個窗口,我正在渲染一個圖像。每一幀的位置都會改變,所以問題在於(顯然)它不會從最後一幀消失。我想每一幀清除窗口。我無法在任何地方找到窗口對象(GraphWin)的清晰方法。而且我不能使用undraw(),因爲那樣我就不得不在屏幕上做所有事情。Graphics.py:如何清除窗口?

+0

你必須爲窗口中的所有事情做點事情。但是因爲'GraphWin'是'Tkinter.canvas'小部件的子類,它意味着它有'find_all()'和'delete()'方法,因爲'GraphWin'不會覆蓋它們(查看模塊的源代碼)。前者將返回畫布上所有對象ID號的列表。然後你可以遍歷列表中的這些數字並在每個數組上調用delete()方法。 – martineau

回答

1

首先要考慮的是如果您只是在幀之間移動圖形對象,然後調用它們的move()方法而不是擦除並重繪它們。如果你必須清除屏幕,那麼我建議:

在下降到Tkinter級別之前,我會考慮使用Zelle Graphics自己的基礎。原因是Zelle Graphics保留了它自己的對象並行記錄,如果你從Tkinter級別刪除它們,你可能會使兩者不同步。這裏是我的建議:

def clear(win): 
    for item in win.items[:]: 
     item.undraw() 
    win.update() 

但是,未提取的項目很慢,可能比您想要的幀速率更慢。所以,你要關閉自動刷新:

win = GraphWin(..., autoflush=False) 

,然後調用:

update() 

,只要你有東西呈現給你的用戶 - 這將加快顯卡,因爲它贏得了沒有顯示所有的中間步驟。

但是,以上建議不適用適用於用win.plot()方法繪製的東西。繪圖在比其他Zelle圖形更低的層次上實施,因此您需要下降到Tkinter以清除繪圖。例如,請參閱How to undraw plot with Zelle graphics?