2009-05-10 5 views
1

왜 내 코드가 검정색 대신 선을 회색으로 인쇄합니까?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() 

답변

1

잘 될 것입니다되어 이미 컬러 문제를 지적 32 비트 비트 맵의 ​​알파 채널 때문입니다.

나는 wx.DC 대신 wx.GCDC을 사용하는 것을 기억합니다.

0

이 좋아 내가 WX (2.8.9.2)의 최신 버전

테스트하고 심지어 측면에 노력하고 왜 지금 나는 궁금하다. 당신이 패널을 칠하려고하지만

대신이

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

할 프레임의 페인트 이벤트를 무시하고 모든 프레임/패널 페인트 문제 옆에

+0

현명한 소리가 들렸지 만 시험해 보았지만 선은 여전히 ​​회색으로 나옵니다. 'self.Bind (wx.EVT_PAINT, self.on_paint)'를'self.panel.Bind (wx.EVT_PAINT, self.on_paint)'로 변경했습니다. 나는 2.8.9.2를 사용하고 있는데, Windows XP의 파이썬 2.6에서는 –

+0

그래도 여전히 회색이다 ... – RSabet

관련 문제