[python-win32] [wxpython-users] Having problems with wxPython - HELP!!!

Tim Roberts timr at probo.com
Fri Apr 25 20:57:37 CEST 2008


Marlin Rowley wrote:
>
> I want to start from the beginning and work my way to what I have 
> now.  Maybe then, I'll see some things that I didn't. :)
>
> Let's start with the Frame and Window creation.  Right now, I pass a 
> resolution into my script (rfxRenderView.py 320 240).  Let's say it's 
> 320x240.  I expect this to be the resolution of the Window to be drawn 
> upon, NOT the frame that includes all the widgets.  However, this is 
> exactly what is happening.  The problem is that I call Frame's 
> constructor in my own child frame and I pass it the size so that the 
> window comes up relatively the size I want, however, the drawing 
> window will be a little less than that because of the Menu bar.  How 
> do I pass the size of the Frame such that the Window gets created with 
> 320x240, THEN the Frame builds around that (so the actually size of 
> the frame+window > 320x240)?

The vocabulary here is "window size" (which includes the decorations) 
and "client region" (which does not).  Yes, when you specify a size, 
that includes the decorations.  You want to specify the size of the 
client region, which you can't do, directly.

Although it is possible to compute the size of each of the decorations, 
it is a tedious process, because of the possibility of themes.  All the 
edges can vary, so you end up fetching a whole bunch of system 
preferences values.  The easiest solution is to fetch your assigned 
window size and your assigned client size, compute the difference, and 
adjust yourself accordingly.  For example, try adding the following 
after you create the wx.Frame:

        ws = self.GetSize()
        cs = self.GetClientSize()
        # Bump the window size by the delta between the two.
        ws.IncBy( *(ws-cs) )
        self.SetSize( ws )

-- 
Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.



More information about the python-win32 mailing list