Tkinter Toplevel sizing issue (using a grid)

R

random joe

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 :(
 
A

Alf P. Steinbach

* 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
 
E

eb303

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 -
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,899
Latest member
RodneyMcAu

Latest Threads

Top