From: random joe on
Hello all,

Hi this i my first post here. I would like to create a tkinter
toplevel window with a custom resize action based on a grid. From the
Tk docs it say you can do this but for the life of me i cannot figure
out how? In my app i wish for the main window to only resize in 20
pixel "jumps" (if you will). I have tried using the toplevel.grid()
and setgrid option and no luck!

## here is the tk doc page about setGrid
http://www.tcl.tk/man/tcl/TkLib/SetGrid.htm

## here is the Tkinter method from wm class
def wm_grid(self,
baseWidth=None, baseHeight=None,
widthInc=None, heightInc=None):
"""Instruct the window manager that this widget shall only be
resized on grid boundaries. WIDTHINC and HEIGHTINC are the
width and
height of a grid unit in pixels. BASEWIDTH and BASEHEIGHT are
the
number of grid units requested in Tk_GeometryRequest."""
return self._getints(self.tk.call(
'wm', 'grid', self._w,
baseWidth, baseHeight, widthInc, heightInc))
grid = wm_grid


## Here is my code.

from Tkinter import *

class TopWin(Tk):
def __init__(self):
Tk.__init__(self)#, setgrid=1)
#self.maxsize(width=50, height=50)
#self.minsize(width=1, height=1)
self.grid(10, 10, 20, 20)

topwin = TopWin()
topwin.mainloop()


Please help. I am going nuts trying to make this work for three hours
already :(
From: random joe on

Hi again,

Is this possible to do? From lack of response i don't know if this is
impossible or just nobody has done this before. If anybody know
solution thank you.
From: Alf P. Steinbach on
* random joe, on 12.06.2010 01:40:
> Hello all,
>
> Hi this i my first post here. I would like to create a tkinter
> toplevel window with a custom resize action based on a grid. From the
> Tk docs it say you can do this but for the life of me i cannot figure
> out how? In my app i wish for the main window to only resize in 20
> pixel "jumps" (if you will). I have tried using the toplevel.grid()
> and setgrid option and no luck!
>
> ## here is the tk doc page about setGrid
> http://www.tcl.tk/man/tcl/TkLib/SetGrid.htm
>
> ## here is the Tkinter method from wm class
> def wm_grid(self,
> baseWidth=None, baseHeight=None,
> widthInc=None, heightInc=None):
> """Instruct the window manager that this widget shall only be
> resized on grid boundaries. WIDTHINC and HEIGHTINC are the
> width and
> height of a grid unit in pixels. BASEWIDTH and BASEHEIGHT are
> the
> number of grid units requested in Tk_GeometryRequest."""
> return self._getints(self.tk.call(
> 'wm', 'grid', self._w,
> baseWidth, baseHeight, widthInc, heightInc))
> grid = wm_grid
>
>
> ## Here is my code.
>
> from Tkinter import *
>
> class TopWin(Tk):
> def __init__(self):
> Tk.__init__(self)#, setgrid=1)
> #self.maxsize(width=50, height=50)
> #self.minsize(width=1, height=1)
> self.grid(10, 10, 20, 20)
>
> topwin = TopWin()
> topwin.mainloop()
>
>
> Please help. I am going nuts trying to make this work for three hours
> already :(

It seems that the 'grid' call only affects programmatic resizing, not user resizing.


<example>
#Py3

from tkinter import *

class TopWin(Tk):
def __init__(self):
Tk.__init__( self )
self.geometry( "40x30" )
self.grid( 10, 10, 20, 20 )

topwin = TopWin()
topwin.mainloop()
</example>



Here the effective presentation area size is (seems to be) 400x300 pixels.


Cheers & hth.,

- Alf

--
blog at <url: http://alfps.wordpress.com>
From: eb303 on
On Jun 12, 1:40 am, random joe <pywi...(a)gmail.com> wrote:
> Hello all,
>
> Hi this i my first post here. I would like to create a tkinter
> toplevel window with a custom resize action based on a grid. From the
> Tk docs it say you can do this but for the life of me i cannot figure
> out how? In my app i wish for the main window to only resize in 20
> pixel "jumps" (if you will). I have tried using the toplevel.grid()
> and setgrid option and no luck!
>
> ## here is the tk doc page about setGridhttp://www.tcl.tk/man/tcl/TkLib/SetGrid.htm
>
> ## here is the Tkinter method from wm class
>     def wm_grid(self,
>          baseWidth=None, baseHeight=None,
>          widthInc=None, heightInc=None):
>         """Instruct the window manager that this widget shall only be
>         resized on grid boundaries. WIDTHINC and HEIGHTINC are the
> width and
>         height of a grid unit in pixels. BASEWIDTH and BASEHEIGHT are
> the
>         number of grid units requested in Tk_GeometryRequest."""
>         return self._getints(self.tk.call(
>             'wm', 'grid', self._w,
>             baseWidth, baseHeight, widthInc, heightInc))
>     grid = wm_grid
>
> ## Here is my code.
>
> from Tkinter import *
>
> class TopWin(Tk):
>     def __init__(self):
>         Tk.__init__(self)#, setgrid=1)
>         #self.maxsize(width=50, height=50)
>         #self.minsize(width=1, height=1)
>         self.grid(10, 10, 20, 20)
>
> topwin = TopWin()
> topwin.mainloop()
>
> Please help. I am going nuts trying to make this work for three hours
> already :(

Works for me on Linux with WindowMaker, but not on the Mac. What is
your platform, and your window manager if applicable? Seems tk just
passes the options to the window manager, so if the wm decides to
ignore them, you're stuck, I'd say.

By the way, you should use more drastic values for your tests. I tried
with self.grid(10, 10, 20, 20) and I hardly saw that it worked. Using
self.grid(0, 0, 100, 100) made it obvious.

HTH
- Eric -