wx.AutoBufferedPaintDC
Verfasst: Mittwoch 13. August 2008, 21:36
Hallo ich bin immer noch dabei mein Programm umzuschreiben und habe da ein Problem wo ich nicht weiss ob es ein denkfehler ist oder ein wx bug?!
originalcode:
neu:
Wie ich Grade gemerkt habe betrifft dieses Problem nur Windows!
Bei der Initialisierung wird die Funktion aufgerufen und das ohne Problem, jedoch wenn die Funktion über ein event gestartet wird, wird Folgendendes ausgegeben:
Dabei sollte doch AutoBufferedPaintDCFactory nur entweder ein PaintDC oder ein BufferedPaintDC zurückgeben. Hat jemand eine Idee wie ich das umschiffen kann?
con
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