title: Tkinter canvas resizing automatically
body: <p>So in the process of answering this <a href="https://stackoverflow.com/questions/22835289/how-to-get-tkinter-canvas-to-dynamically-resize-to-window-width/22837522#22837522">question</a>, I came across some odd behaviour from Tkinter. I have a class that resizes a <code>Canvas</code> instance and any widgets drawn on it. However when I run the code, regardless of the initial window dimensions, the window expands continuously until it fills the entire screen. After this happens, the window behaves exactly as expected, resizing the objects properly. The window only expands to fill the screen on launch.</p>
  
  <p>From reading the Tkinter docs I could believe that this may be platform specific (I don't have any proof though).</p>
  
  <p>My question is: Why does this happen? How can I stop it?</p>
  
  <p>The code is below:</p>
  
  <pre><code>from Tkinter import *
  
  # a subclass of Canvas for dealing with resizing of windows
  class ResizingCanvas(Canvas):
      def __init__(self,parent,**kwargs):
          Canvas.__init__(self,parent,**kwargs)
          self.bind("&lt;Configure&gt;", self.on_resize)
          self.height = self.winfo_reqheight()
          self.width = self.winfo_reqwidth()
  
      def on_resize(self,event):
          # determine the ratio of old width/height to new width/height
          wscale = float(event.width)/self.width
          hscale = float(event.height)/self.height
          self.width = event.width
          self.height = event.height
          # resize the canvas 
          self.config(width=self.width, height=self.height)
          # rescale all the objects tagged with the "all" tag
          self.scale("all",0,0,wscale,hscale)
  
  def main():
      root = Tk()
      myframe = Frame(root)
      myframe.pack(fill=BOTH, expand=YES)
      mycanvas = ResizingCanvas(myframe,width=850, height=400, bg="red")
      mycanvas.pack(fill=BOTH, expand=YES)
  
      # add some widgets to the canvas
      mycanvas.create_line(0, 0, 200, 100)
      mycanvas.create_line(0, 100, 200, 0, fill="red", dash=(4, 4))
      mycanvas.create_rectangle(50, 25, 150, 75, fill="blue")
  
      # tag all of the drawn widgets
      mycanvas.addtag_all("all")
      root.mainloop()
  
  if __name__ == "__main__":
      main()
  </code></pre>