diff --git a/src/gui/resizablecanvas.py b/src/gui/resizablecanvas.py new file mode 100644 --- /dev/null +++ b/src/gui/resizablecanvas.py @@ -0,0 +1,34 @@ +import tkinter as tk + + +class ResizableCanvas(tk.Canvas): + def __init__(self, master=None): + tk.Canvas.__init__(self, master, highlightthickness=0) + + self._master=master + self._width=0 + self._height=0 + + master.bind("", self._onResize) + + def configure(self,*args,**kwargs): + if "width" in kwargs: self._width=kwargs["width"] + if "height" in kwargs: self._height=kwargs["height"] + + super().configure(*args,**kwargs) + + def _onResize(self, event): + wScale=float(event.width)/self._width + hScale=float(event.height)/self._height + scale=min(wScale,hScale) + + self._width*=scale + self._height*=scale + self.scale("all",0,0,scale,scale) # rescale all the objects tagged with the "all" tag + + x=(event.width-self._width)/2 + y=(event.height-self._height)/2 + + # place the widget, giving it an explicit size + self.place(in_=self._master, x=x, y=y, width=self._width, height=self._height) + return scale