2010-01-11 60 views
1

我需要在滾動面板中繪製圖片(以評論它)。我遇到了麻煩,因爲當我放大或縮小它時,它的行爲不正確。它會停止繪圖,然後在錯誤的地方顯示一段時間。就在窗口的左上角。並沒有正確地畫線。下面的 是(onLeftDown)函數的代碼(應繪製的按鈕)。右鍵事件(放大)。希望已經夠清楚了。在wxpython中縮放圖片時出現問題

你們有什麼想法,我該如何解決?
由於事先

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()使用不同的縮進,然後使用上一行和下一行代碼。也許這是你的問題? – 2010-01-11 11:50:35

+0

不,這不是問題。沒有縮進錯誤,但此網頁上的縮進錯過了。不知道如何在這裏修復它。 – 2010-01-11 12:47:27

+0

'self.HasCapture()和event.Dragging():'這一行應該表示什麼? – SilentGhost 2010-01-11 13:18:52

回答

3

您需要擴展鼠標座標,使其同步與繪圖的比例,因此,如果您使用的是userScale = 2,鼠標在x = 10將在20結束了。 所以你需要做到這一點

sx, sy = x/cur_scale, y/cur_scale 

你也需要做不onmotion EVT_PAINT事件繪製,運動,你只需要刷新窗口和油漆事件應採取的你想畫什麼照顧。

+0

順便說一句,你不需要開始/結束繪圖 - 他們什麼都不做。 (哎呀,應該是Moayyad) – 2010-01-11 15:38:32

+0

實際上,繪圖是可以的(他正在複製wx演示代碼)--EVT_PAINT只是將正在繪製的位圖緩衝區移動到運動事件中。這是在我的繪圖程序的繪畫事件中的代碼: wx.BufferedPaintDC(self,self.buffer,wx.BUFFER_VIRTUAL_AREA) – 2010-01-11 15:50:02

+0

但仍然..這不能回答我的問題,繪圖很好,但不使用DC時。 SetUserScale()。你嘗試過嗎?或者是否有人有另一種縮放圖像的方式 – 2010-01-11 16:00:56