2016-03-08 68 views
-4

在Python 2.7中,我想要顯示一些簡單的圖形,例如紅色方塊在藍色窗口上移動。在每一幀上,我想更新正方形的位置,並渲染新窗口。我正在尋找簡單和輕量級的東西。Python 2.7中的簡單動畫

我見過人們使用matplotlib繪製形狀,但我不想處理軸和數據點。我也看過pygame的建議,但這似乎是我想要的重量級,因爲我不想創建一個遊戲,只是一個簡單的動畫。

所以我真正想要的是在每一幀上,我只是指出圖像上每個像素的顏色,然後顯示該圖像。有什麼好的建議?

+0

There a在本網站上重新提供許多與動畫相關的問題和答案。在提出問題之前,你應該做更多的研究,在其他答案中嘗試其中一種解決方案,然後在遇到困難時再回來詢問具體問題。 –

+0

有關完整的工作示例,請參閱http://stackoverflow.com/questions/6740855/board-drawing-code-to-move-an-oval/6789351#6789351 –

回答

2

Tkinter不適合設置單個像素。如果你想移動長方形或橢圓形(小橢圓看起來像一個像素,但它不能縮放以更新整個圖像)。

def update(x,y): 
    canvas.delete('all') 
    canvas.create_rectangle(x-1,y-1,x+1,y+1) 

您當然可以更明智地保存矩形的返回值,然後只清除適當的元素。或者,您可以像Bryan指出的那樣直接移動現有的元素。 As he explains elsewhere Tkinter當然支持繪製圖像,橢圓形和其他東西。 Here's a canonical source編輯:這是舊的,不canoncialThis one's slightly better有關使用定時器循環動畫一般的來源,here's Bryan agian

布賴恩還指出,你可以直接像素的工作You can do that with PhotoImage。不帶圖形擴展

類似數組的像素訪問像pygame的一個強大的模塊將是最具擴展性的選擇。不過,我通過修改numpy數組的元素,然後displaying it as an imageyou also need this link to display the images),成功(在教育設置中只有)編寫圖形引擎。

這可以讓你做像素級修改;因爲編寫修改numpy數組的C擴展比較簡單,所以您可以對快速圖像處理進行原型製作,以執行自定義操作。雖然我用這種方法寫了whole graphics engines,但我只能推薦它用於教育目的。

否則,只要硬着頭皮,拉openGl或pygame。長遠來看,你會爲自己節省很多時間。

摘要

  • 很簡單的動畫可以直接在Tkinter的
  • 教育目的來完成,你可以做任意圖形與numpy的和Tkinter的
  • 對於rhobust動畫,檢查出一個完整的庫(openGl,matplotlib,pygame)適合您的需求(圖形渲染,統計製圖,遊戲開發等)
+1

無需刪除並重新創建畫布上的項目。您可以移動現有的項目。另外,你提到了做動畫的典型例子,但這個例子絕對不是規範的。最後,使用tkinter可以處理圖像中的單個像素。這有點慢,但是如果你不一次改變太多個別像素,速度就夠快了。 –

+0

@BryanOakley更好?我覺得這個源碼對於1998年的時間旅行者來說已經足夠規範:)(沒有看看我抓住effbot頁面的日期)。 PIL方法是什麼意思的像素操作?我見過你編寫tcl擴展來修改小部件,但我不熟悉任何tkinter本地直接像素訪問例程 –

+0

你不需要PIL來操縱像素。 [PhotoImage](http://tkinter.unpythonic.net/wiki/PhotoImage)類(tkinter的一部分)具有獲取和設置像素的方法。 –