wxPython: panel not fully painted

Morpheus morpheus at spamhater.too
Thu Jan 25 11:03:02 EST 2007


On Wed, 24 Jan 2007 13:35:51 -0800, citronelu wrote:

> Hi,
> 
> I'm new to wxpython, and the following code is my first serious
> attempt:
> 
> 
> #~ start code
> import wx
> 
> class MyPanel(wx.Panel):
>     def __init__(self, parent, id):
>         wx.Panel.__init__(self, parent, id)
>         self.parent = parent
>         button = wx.Button(self, -1, "Refresh")
>         button.SetPosition((100, 100))
>         button.SetFocus()
> 
>         self.Bind(wx.EVT_BUTTON, self.OnCloseMe, button)
> 
>     def OnCloseMe(self, event):
>         self.parent.f_redraw(self)
>         pass
> 
> 
> class MyFrame(wx.Frame):
>     def __init__(
>             self, parent, ID, title, pos=wx.DefaultPosition,
>             size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE
>             ):
> 
>         wx.Frame.__init__(self, parent, ID, title, pos, size, style)
> 
>     def f_redraw(self, kill_window):
>         kill_window.Destroy()
>         MyPanel(self, -1)
>         #~ self.SendSizeEvent()
> 
> 
> wxApp = wx.App()
> f = MyFrame(None, -1, "App Title")
> MyPanel(f, -1)
> f.Show()
> wxApp.MainLoop()
> 
> 
> #~ end code
> 
> 
> My problem is: when I press the "refresh" button, the new panel is
> painted only as a 20x20 pixels square on the top right side of the
> frame. If I resize the frame, the panel is repainted correctly (that's
> why I inserted the self.SendSizeEvent() line - commented above).
> 
> Is there something I'm missing, or this is normal ?
> 
> I'm using python 2.4.3 and wxpython 2.8.1.1 unicode, on WinXP SP2.
> Windows extensions are also installed.

Consider using sizers, you'll need them anyway. They do such things for
you, and many other things too.

The help file has a good chapter on this: Working with sizers.

Kind regards
Morpheus





More information about the Python-list mailing list