2013-12-15 7 views
1

이 예제를 내 특정 문제에 적용 할 수는 없지만 실제로이 작업에 대해 수백 가지 예제가 있다는 것을 알고 있습니다. 아래 코드에서 볼 수 있듯이 비트 맵 "self.image"에 다각형을 그리려는 중입니다. 이 코드는 MS Windows에서 절대적으로 작동합니다. 리눅스에서는이 코드가 폴리곤을 그리지 않습니다.wxpython (크로스 플랫폼)을 사용하여 비트 맵에서 그리기

나는이 How to draw text in a bitmap using wxpython? 에 따라 MemoryDC와 다른 "dcs"로 놀려고했지만 결과는 동일합니다.

내 질문은 : 왜 내 코드가 Linux에서 실패합니까? 이것이 MS Windows에서 작동하는 이유는 무엇입니까? (조금 벗어난 주제) 왜 사람들은 EVP_PAINT에 바인딩 된 OnPaint 메소드의 PaintDC를 독점적으로 그리는가?

클래스 속성 :

self.dc = wx.ClientDC(self.image) 
    self.dc.SetPen(wx.Pen(colour='red', width=4, style=wx.SOLID)) 
    self.polygon = list() 

I 그리기 시작할 때이 메소드가 호출되고 : 나는 고정

def draw_polygon(self, event): 
    self.polygon.append(event.GetPositionTuple()) 
    if len(self.polygon) > 1: 
     self.dc.DrawLines(points=self.polygon) 

답변

0

: 위에서 바인딩

def start_drawing(self): 
    self.image.Bind(event=wx.EVT_LEFT_DOWN, handler=self.draw_polygon) 
    self.dc.BeginDrawing() 

이 방법은 처리 나 자신의 버그. 문제는 내가 제공 한 코드에서 실제로 볼 수 없었습니다.

도면을 작성하기 전에 self.image을 변경하는 방법이 있습니다. 따라서 클래스 본문에서 ClientDC에 할당 한 이미지는 그리기 시작할 때 self.image과 같은 이미지가 아닙니다. 이미지 세터에 self.dc = wx.ClientDC(self.image)을 추가하면 내 문제가 해결되었습니다.

MS Windows에서이 코드가 실행될 때 왜 작동하는지 이해할 수 없습니다. 이것은 처음부터 결코 작동해서는 안됩니다.