2011-01-24 36 views
1

我正在嘗試使用tkinter來定期刷新正方形網格。網格中的每個正方形都塗上一定的顏色(比如從給定的函數中獲得);在每個正方形的中心繪製一個更小的圓圈(顏色也可以從函數中獲得)。tkinter:顯示正方形網格

如果我必須從頭開始,也許有一個例子或標準配方,我可以使用?

+1

您是否在使用圓圈繪製網格或刷新它時遇到問題? – martineau 2011-01-24 11:37:44

+0

@martineau:我以簡明的方式進行繪圖時遇到問題。我想我誤解了tkinter應該如何使用。我認爲我不會刷新問題,但我還沒有做到。 – max 2011-01-24 11:45:04

回答

3

下面是一個快速入門示範,介紹如何繪製矩形和圓形的網格,以及如何每秒更新一次顯示。如果你以前從未在tk上編程過,它使用的概念對你來說無疑是陌生的。您需要閱讀畫布對象ID和標籤以及after命令的功能。

import Tkinter as tk 
import random 

class App(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     self.canvas = tk.Canvas(self, width=500, height=500, borderwidth=0, highlightthickness=0) 
     self.canvas.pack(side="top", fill="both", expand="true") 
     self.rows = 100 
     self.columns = 100 
     self.cellwidth = 25 
     self.cellheight = 25 

     self.rect = {} 
     self.oval = {} 
     for column in range(20): 
      for row in range(20): 
       x1 = column*self.cellwidth 
       y1 = row * self.cellheight 
       x2 = x1 + self.cellwidth 
       y2 = y1 + self.cellheight 
       self.rect[row,column] = self.canvas.create_rectangle(x1,y1,x2,y2, fill="blue", tags="rect") 
       self.oval[row,column] = self.canvas.create_oval(x1+2,y1+2,x2-2,y2-2, fill="blue", tags="oval") 

     self.redraw(1000) 

    def redraw(self, delay): 
     self.canvas.itemconfig("rect", fill="blue") 
     self.canvas.itemconfig("oval", fill="blue") 
     for i in range(10): 
      row = random.randint(0,19) 
      col = random.randint(0,19) 
      item_id = self.oval[row,col] 
      self.canvas.itemconfig(item_id, fill="green") 
     self.after(delay, lambda: self.redraw(delay)) 

if __name__ == "__main__": 
    app = App() 
    app.mainloop()