Im 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