title: Efficiently create a grid in tkinter
body: <p>I am currently using the following code to create a grid the size of the window within python using the tkinter module</p>
  
  <pre><code>import tkinter as tk
  
  class Frame():
  
      def __init__(self, *args, **kwargs):
          # Setup Canvas
          self.c = tk.Canvas(root, height=500, width=500, bg='white')
          self.c.pack(fill=tk.BOTH, expand=True)
          self.c.bind('&lt;Configure&gt;', self.createGrid)
          self.pixel_width = 20
          self.pixel_height = 20
  
          # Setup binds
          self.c.bind("&lt;ButtonPress-1&gt;", self.leftClick)
  
      def leftClick(self, event):
          items = self.c.find_closest(event.x, event.y)
          if items:
              rect_id = items[0]
              self.c.itemconfigure(rect_id, fill="red")
  
      def createGrid(self, event=None):
          for x in range(0, self.c.winfo_width()):
              for y in range(0, self.c.winfo_height()):
                  x1 = (x * self.pixel_width)
                  x2 = (x1 + self.pixel_width)
                  y1 = (y * self.pixel_height)
                  y2 = (y1 + self.pixel_height)
                  self.c.create_rectangle(x1,y1,x2,y2)
          self.c.update()
  
  root = tk.Tk()
  gui = Frame(root)
  root.mainloop()
  </code></pre>
  
  <p>If I set the canvas height and width to something like 50 this loads quite quickly, although when the size is increased to 500 x 500 like is set here it takes about 5 seconds to create the grid. I have tried creating the grid with lines but the problem with that is I need squares as I am then planning to change the colour of a square that is selected. Is there any way I can make this more efficient?</p>