2009-05-10 8 views
1

Pourquoi mon code imprime les lignes grises au lieu de noir?problème lors de l'utilisation MemoryDC

import wx 

class MyFrame(wx.Frame): 
    def __init__(self,*args,**kwargs): 
     wx.Frame.__init__(self,*args,**kwargs) 
     self.panel=wx.Panel(self,-1,size=(1000,1000)) 
     self.Bind(wx.EVT_PAINT, self.on_paint) 
     self.Bind(wx.EVT_SIZE, self.on_size) 

     self.bitmap=wx.EmptyBitmapRGBA(1000,1000,255,255,255,255) 

     dc=wx.MemoryDC() 
     dc.SelectObject(self.bitmap) 
     dc.SetPen(wx.Pen(wx.NamedColor("black"),10,wx.SOLID)) 
     dc.DrawCircle(0,0,30) 
     dc.DrawLine(40,40,70,70) 
     dc.Destroy() 

     self.Show() 

    def on_size(self,e=None): 
     self.Refresh() 

    def on_paint(self,e=None): 
     dc=wx.PaintDC(self.panel) 
     dc.DrawBitmap(self.bitmap,0,0) 
     dc.Destroy() 

if __name__=="__main__": 
    app=wx.PySimpleApp() 
    my_frame=MyFrame(parent=None,id=-1) 
    app.MainLoop() 

Répondre

1

A côté du problème cadre/peinture du panneau déjà signalé le problème de la couleur est due à la couche alpha du bitmap 32 bits.

Je me souviens avoir lu utiliser wx.GCDC au lieu de wx.DC.

0

Ok J'ai testé avec une version plus récente de WX (2.8.9.2)

et maintenant je me demande pourquoi il travaille même de votre côté. vous essayez de peindre panneau mais remplaçant l'événement de peinture de cadre

font place ce

self.panel.Bind(wx.EVT_PAINT, self.on_paint) 

et tout ira bien

+0

raisonnable a retenti, mais je l'ai essayé et les lignes sortent gris encore. J'ai changé 'self.Bind (wx.EVT_PAINT, self.on_paint)' 'à self.panel.Bind (wx.EVT_PAINT, self.on_paint)'. J'utilise 2.8.9.2 aussi, sur Python 2.6 sur Windows XP –

+0

juste encore gris ... – RSabet