2010-01-11 2 views
1

스크롤 된 패널에서 이미지 위에 그림을 그릴 필요가 있습니다. 그것을 확대하거나 축소 할 때 올바르게 동작하지 않기 때문에 문제가 있습니다. 그리기를 멈추고 잠시 후 잘못된 곳에서 그것을 보여줍니다. 창 오른쪽 상단 모서리에 있습니다. 라인을 올바르게 그려 내지 않습니다. 아래 은 (onLeftDown) 함수 (그려야하는 버튼)의 코드입니다. 오른쪽 버튼 이벤트 (확대). 그것이 충분히 명확하길 바란다.wxpython에서 그림을 확대/축소 할 때 문제가 발생했습니다.

너희들은 무슨 일이 일어나고 있는지 그리고 어떻게 해결할 수 있는지 알고 있니? 당신이 userScale = 2를 사용하는, 그래서 만약 당신이,이 도면의 스케일링과 동기화되도록 마우스 좌표를 확장 할 필요가

def OnLeftButtonEvent(self, event): 
    self.curLine = [] 
    self.x, self.y = event.GetPositionTuple() 
    self.CaptureMouse() 

def OnMotion(self, event): 
    if self.HasCapture() and event.Dragging(): 
     dc = wx.BufferedDC(None,self.buffer) 
     dc.SetUserScale(self.scale,self.scale) 
     # to zoom in and out (increases whenever someone presses the right mouse button 
     dc.BeginDrawing() 
     dc.SetPen(wx.Pen(wx.BLUE, 3)) 
     coords = (self.x, self.y) + event.GetPositionTuple() 
     self.curLine.append(coords) 
     dc.DrawLine(*coords) 
     self.x, self.y = event.GetPositionTuple() 
     self.SetXY(event) 
     dc.EndDrawing() 

def OnRightDown(self,event): 
    print self.scale 
    self.scale=self.scale*2.0 
    self.initDrawing() 
    self.maxHeight=self.maxHeight*2 
    self.maxWidth=self.maxWidth*2 
+0

게시 한 원본 코드가 실제 코드 인 경우 가장 큰 공백을 사용하면 문제가 발생합니다. OnRightDown에서 self.initDrawing()은 이전 및 다음 코드 줄 다음에 들여 쓰기를 사용합니다. 아마도 그것은 당신의 문제입니까? –

+0

그게 문제가 아니에요. 들여 쓰기 오류가 없지만이 웹 페이지의 들여 쓰기가 누락되었습니다. 여기에서 그것을 고치는 법을 모른다. –

+0

'self.HasCapture() 및 event.Dragging() :'이 줄은 무엇을 의미합니까? – SilentGhost

답변

3

사전에
덕분에, 마우스 X = 10 (20)에 종료됩니다 . 은 그래서 당신은 움직임에 당신은 당신이 그릴 원하는 것을 알아서해야 창 및 페인트 이벤트를 새로 고침 할 필요 또한 없다 onmotion에 EVT_PAINT 이벤트에 그리기 않는해야이

sx, sy = x/cur_scale, y/cur_scale 

할 필요가있다.

+0

btw, 시작/끝 그리기가 필요하지 않습니다. 아무 것도하지 않습니다. (멍청이, Moayyad에 있어야합니다) –

+0

사실, 그림은 괜찮습니다 (그는 wx 데모 코드를 복사하고 있습니다) - EVT_PAINT는 모션 이벤트에서 그려지는 비트 맵 버퍼를 단순히 blit합니다. 이것은 내 드로잉 프로그램의 페인트 이벤트 코드입니다. wx.BufferedPaintDC (self, self.buffer, wx.BUFFER_VIRTUAL_AREA) –

+0

그래도 .. 내 질문에 대답하지 않으면 그림이 좋지만 dc를 사용할 때는 그렇지 않습니다. SetUserScale(). 너 시도 했니? 또는 다른 사람이 이미지를 확대/축소 할 수있는 방법이 있습니까? –