originalcode:
Code: Alles auswählen
def OnPaint(self, evt=None, shape=None):
logging.debug(u"OnPaint")
logging.debug(u"\t Folgendes Event wurde übergeben: " + str(evt))
logging.debug(u"\t Folgendes Shape wurden übergeben: " + str(shape))
#Uebergabe des DC an das Panel
#dc = wx.PaintDC(self)
p_dc = wx.PaintDC(self)
if sys.platform == "darwin":
logging.debug("\t Folgende Plattform wurde erkannt:" + sys.platform)
dc = p_dc #default dc
logging.debug("\t es wurde die gc Drawengine verwendet.")
else :
logging.debug("\t Folgende Plattform wurde erkannt:" + sys.platform)
dc = wx.GCDC(p_dc) #wx.GCDC(dc)
logging.debug("\t Es wurde die gcdc Drawengine verwendet.")
if not evt:
self.TileBackground(dc)
self.PrepareDC(dc)
self.DrawShapes(dc)
if shape:
# adjusting redraw rect to delete text under image
size =dc.GetSizeTuple()
self.RefreshRect(wx.Rect(1, 1, size[0], size[1]), True)
self.Update()
neu:
Code: Alles auswählen
def OnPaint(self, evt=None, shape=None):
""" Draws buffer to the screen.
Desides whether OS is auto buffered or not.
On Mac gcdc had a lot of problems, so we dont use them on mac."""
logging.debug(u"BufferedWindow - OnPaint")
paintdc = wx.AutoBufferedPaintDCFactory(self)
if sys.platform == "darwin":
logging.debug("\t Folgende Plattform wurde erkannt:" + sys.platform)
dc = paintdc #default dc
logging.debug("\t es wurde die gc Drawengine verwendet.")
else :
logging.debug("\t Folgende Plattform wurde erkannt:" + sys.platform)
dc = wx.GCDC(paintdc) #wx.GCDC(dc)
logging.debug("\t Es wurde die gcdc Drawengine verwendet.")
if not evt:
self.TileBackground(dc)
self.PrepareDC(dc)
self.DrawShapes(dc)
if shape:
# adjusting redraw rect to delete text under image
size =dc.GetSizeTuple()
self.RefreshRect(wx.Rect(1, 1, size[0], size[1]), True)
self.Update()
dc.DrawBitmap(self._Buffer,0,0)
Bei der Initialisierung wird die Funktion aufgerufen und das ohne Problem, jedoch wenn die Funktion über ein event gestartet wird, wird Folgendendes ausgegeben:
Code: Alles auswählen
File "C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx\_gdi.py", line 4937,
in AutoBufferedPaintDCFactory
return _gdi_.AutoBufferedPaintDCFactory(*args, **kwargs)
wx._core.PyAssertionError: C++ assertion "wxAssertFailure" failed at ..\..\src\m
sw\dcclient.cpp(219) in wxPaintDC::wxPaintDC(): wxPaintDC may be created only in
EVT_PAINT handler!
08-13 22:25 root DEBUG OnLeftUp
con