I’m trying to create a way to pass the wx.dc object between multiple
object, and its mostly working… I can get two different panels to draw to
the same DC but when I scale the window out… it looks like the 2nd panel
is getting blocked by something, im not sure if its a OnPaint problem or
Maybe something with me hiding the second panel. Please help me out here…
thanks…

Attached is my two python scripts that im using… use the test.py to test
the PaintPanel script..
import wx

class PaintPanel(wx.Panel):
    def __init__(self, parent, id, sub = 0, *args, **kwds):
        wx.Panel.__init__(self, parent, id, *args, **kwds)
        self.parent = parent
        self.sub =sub
        self.items = []
        
        if self.sub:
            self.parent.AddItem(self)
            self.Hide()
        else:
            pass
            self.Bind(wx.EVT_PAINT, self.OnPaint)
            self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
        
    def AddItem(self, item):
        ## Add Item
        self.items.append(item)
        
    def RemoveItem(self, item):
        ## Remove Item
        for i in self.items:
            if(i == item):
                self.items.remove(i)
        
    def RemoveAll(self):
        ## Remove All Items
        self.items.clear()
        
    def OnPaint(self, event):
        self.sizeX, self.sizeY  = self.GetSize()
        print "position is: " + str(self.parent.GetPosition())
        print "size is: " + str(self.parent.GetSize())
                
        ## Setup Double Buffer DC
        buffer = wx.EmptyBitmap(self.sizeX, self.sizeY)        
        memDC = wx.MemoryDC()
        memDC.SelectObject(buffer)
        dc = wx.PaintDC(self)
        self.PrepareDC(dc)
        
        ##memDC.SetBackground(wx.Brush("White"))
        ##memDC.Clear()
        
        self.Draw(memDC)
        
        memDC.EndDrawing()
        
        ## Copy DC from MemoryDC
        dc.Blit(0, 0, self.sizeX, self.sizeY,  memDC, 0, 0, wx.COPY, True)
    
        ## Clean Up The DC
        ##del memDC
        ##del dc
    
    def Draw(self, dc):
        ## Draw All Attached Items
        for item in self.items:
            item.Draw(dc)
        
    def OnEraseBackground(self, event):
        pass

class PaintItem:
    def __init__(self, parent, id, name = ""):
        self.parent = parent
            
        self.name = name
        
        self.parent.AddItem(self)
    def Draw(self, dc):
        self.posX, self.posY  = self.parent.GetPosition()
        dc.SetTextForeground("BLUE")
        dc.SetFont(wx.Font(50, wx.SWISS, wx.NORMAL, wx.BOLD))
        dc.DrawText( self.name, self.posX, self.posY)
        
if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    frame = wx.Frame(None, -1, size = (50,50))
    frame.SetBackgroundColour((0,0,0))
    
    panel = PaintPanel(frame, -1, size = (50,50))
    item = PaintItem(panel, -1, name = "test1")
    
    app.SetTopWindow(frame)
    frame.Show()
    app.MainLoop()
import wx
import PaintPanel

class TestFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        
        self.panel = PaintPanel.PaintPanel(self, -1)
        self.subPanel= PaintPanel.PaintPanel(self.panel, -1, sub = 1)
        
        item1 = PaintPanel.PaintItem(self.panel, -1, name = "main")
        item2 = PaintPanel.PaintItem(self.subPanel, -1, name = "sub")

        self.__set_properties()
        self.__do_layout()

    def __set_properties(self):
        self.SetTitle("Test")

    def __do_layout(self):
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        grid_sizer = wx.FlexGridSizer(3, 3, 0, 0)
        grid_sizer.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer.Add(self.subPanel, 1, wx.EXPAND, 0)
        grid_sizer.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer.Add((20, 20), 0, wx.EXPAND, 0)
        
        
        grid_sizer.Fit(self.panel)
        grid_sizer.SetSizeHints(self.panel)
        grid_sizer.AddGrowableRow(0)
        grid_sizer.AddGrowableRow(1)
        grid_sizer.AddGrowableRow(2)
        grid_sizer.AddGrowableCol(0)
        grid_sizer.AddGrowableCol(1)
        grid_sizer.AddGrowableCol(2)
        
        self.panel.SetAutoLayout(True)
        self.panel.SetSizer(grid_sizer)        
        sizer.Add(self.panel, 1, wx.EXPAND, 0)
        self.SetAutoLayout(True)
        self.SetSizer(sizer)
        sizer.Fit(self)
        sizer.SetSizeHints(self)
        self.Layout()


class MyApp(wx.App):
    def OnInit(self):
        wx.InitAllImageHandlers()
        frame = TestFrame(None, -1, "")
        frame.SetSize((500,200))
        self.SetTopWindow(frame)
        frame.Show()
        return 1

if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to