wxPython: panel not fully painted

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • citronelu@yahoo.com

    #1

    wxPython: panel not fully painted

    Hi,

    I'm new to wxpython, and the following code is my first serious
    attempt:


    #~ start code
    import wx

    class MyPanel(wx.Pane l):
    def __init__(self, parent, id):
    wx.Panel.__init __(self, parent, id)
    self.parent = parent
    button = wx.Button(self, -1, "Refresh")
    button.SetPosit ion((100, 100))
    button.SetFocus ()

    self.Bind(wx.EV T_BUTTON, self.OnCloseMe, button)

    def OnCloseMe(self, event):
    self.parent.f_r edraw(self)
    pass


    class MyFrame(wx.Fram e):
    def __init__(
    self, parent, ID, title, pos=wx.DefaultP osition,
    size=wx.Default Size, style=wx.DEFAUL T_FRAME_STYLE
    ):

    wx.Frame.__init __(self, parent, ID, title, pos, size, style)

    def f_redraw(self, kill_window):
    kill_window.Des troy()
    MyPanel(self, -1)
    #~ self.SendSizeEv ent()


    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.SendSizeEv ent() 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.

  • Chris Mellon

    #2
    Re: wxPython: panel not fully painted

    On 24 Jan 2007 13:35:51 -0800, citronelu@yahoo .com <citronelu@yaho o.comwrote:
    Hi,
    >
    I'm new to wxpython, and the following code is my first serious
    attempt:
    >
    >
    #~ start code
    import wx
    >
    class MyPanel(wx.Pane l):
    def __init__(self, parent, id):
    wx.Panel.__init __(self, parent, id)
    self.parent = parent
    button = wx.Button(self, -1, "Refresh")
    button.SetPosit ion((100, 100))
    button.SetFocus ()
    >
    self.Bind(wx.EV T_BUTTON, self.OnCloseMe, button)
    >
    def OnCloseMe(self, event):
    self.parent.f_r edraw(self)
    pass
    >
    >
    class MyFrame(wx.Fram e):
    def __init__(
    self, parent, ID, title, pos=wx.DefaultP osition,
    size=wx.Default Size, style=wx.DEFAUL T_FRAME_STYLE
    ):
    >
    wx.Frame.__init __(self, parent, ID, title, pos, size, style)
    >
    def f_redraw(self, kill_window):
    kill_window.Des troy()
    MyPanel(self, -1)
    #~ self.SendSizeEv ent()
    >
    >
    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.SendSizeEv ent() 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.
    >
    This is expected. Note that your "redraw" is no such thing - you are
    destroying the window and creating a new one.

    A feature of the wx.Frame class is that if it has one and only one
    child, that child is sized to fill the client area of the frame.
    However, this sizing happens in response to size events of the frame
    itself, so when you create the new panel, it is shown at its default
    size until you resize the frame (or emulate resizing the frame via
    SendSizeEvent).

    Comment

    • Morpheus

      #3
      Re: wxPython: panel not fully painted

      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.Pane l):
      def __init__(self, parent, id):
      wx.Panel.__init __(self, parent, id)
      self.parent = parent
      button = wx.Button(self, -1, "Refresh")
      button.SetPosit ion((100, 100))
      button.SetFocus ()
      >
      self.Bind(wx.EV T_BUTTON, self.OnCloseMe, button)
      >
      def OnCloseMe(self, event):
      self.parent.f_r edraw(self)
      pass
      >
      >
      class MyFrame(wx.Fram e):
      def __init__(
      self, parent, ID, title, pos=wx.DefaultP osition,
      size=wx.Default Size, style=wx.DEFAUL T_FRAME_STYLE
      ):
      >
      wx.Frame.__init __(self, parent, ID, title, pos, size, style)
      >
      def f_redraw(self, kill_window):
      kill_window.Des troy()
      MyPanel(self, -1)
      #~ self.SendSizeEv ent()
      >
      >
      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.SendSizeEv ent() 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


      Comment

      • citronelu@yahoo.com

        #4
        Re: wxPython: panel not fully painted

        Thank you.

        Comment

        Working...