DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   Python (http://www.daniweb.com/forums/forum114.html)
-   -   Changing control sizes at run-time (http://www.daniweb.com/forums/thread70133.html)

Acolyte Feb 16th, 2007 12:59 am
Changing control sizes at run-time
 
Hello,

I have a simple script with 2 buttons positioned vertically within a sizer on a panel.

A button-click event attached to the top button changes the height of the top button. However, even though the height of the top button changes, the height of the bottom button does not automatically resize to accomodate the new height of the top button.

Adding self.myboxsizer.Layout() after I change the height of the button does not change the height of the bottom button, but only serves to revert the height of the top button to its original (unmodified) height.

How can I change the height of the top button and automatically resize the height of the bottom button?

[php]

#!/usr/bin/python


import wx


class AFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)

self.SetSize(wx.Size(300,400))

self.panel = wx.Panel(self)
self.button1 = wx.Button(self.panel, 1000, "Button1")
self.button1.Bind(wx.EVT_BUTTON, self.BtnClick)

self.button2 = wx.Button(self.panel, 1001, "Button2")

self.myboxsizer = wx.BoxSizer(wx.VERTICAL)
self.myboxsizer.Add(self.button1,0,wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT,30)
self.myboxsizer.Add(self.button2,1,wx.EXPAND|wx.ALL,30)

self.panel.SetSizer(self.myboxsizer)

def BtnClick(self,event):
self.button1.SetSize(wx.Size(-1,80))
#self.myboxsizer.Layout()



if __name__ == '__main__':
app = wx.App()
daframe = AFrame(None)
daframe.Show()
app.MainLoop()



[/php]

Any assistance will be appreciated. Thank you.

bumsfeld Feb 16th, 2007 1:25 pm
Re: Changing control sizes at run-time
 
For button1 use :
self.myboxsizer.Add(self.button1,0,wx.EXPAND|wx.ALL,30)
I works on Windows OS, Linux may behave differently.

Acolyte Feb 16th, 2007 1:44 pm
Re: Changing control sizes at run-time
 
Thanks bumsfeld.
Unfortunately the suggestion doesn't work on fedora 6.
Puzzled.

Acolyte Feb 17th, 2007 7:31 am
Re: Changing control sizes at run-time
 
Solution discovered with a little help from friends on another post ...

You need to set the minimum size of the button so that the buttons are rendered with the desired dimensions by the controlling sizer on linux:

[php] def BtnClick(self,event):
newsize = wx.Size(-1,80)
self.button1.SetMinSize(newsize)
self.button1.SetSize(newsize)
self.myboxsizer.Layout()
[/php]
The above displays the buttons correctly on fc6.


All times are GMT -4. The time now is 7:10 am.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC