2013-12-15 50 views
1

我知道這個任務中有幾百個例子,儘管我沒有設法將這些例子應用於我的具體問題。正如你可以在下面的代碼中看到的,我試圖在位圖「self.image」上繪製一個多邊形。此代碼在MS Windows上工作得非常好。在Linux上,這段代碼不會繪製我的多邊形。使用wxpython繪製位圖(跨平臺)

我試圖根據這個How to draw text in a bitmap using wxpython? 玩不同的「dcs」像MemoryDC,但結果是一樣的。

我的問題是: 爲什麼我的代碼在Linux上失敗?爲什麼這個工作在MS Windows上? (有點偏離主題)爲什麼人們經常在綁定到EVT_PAINT的OnPaint方法中專門繪製PaintDC?

類屬性:

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

此方法被調用時,我想要開始繪圖:

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

該方法處理從以上的結合:

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

回答

0

我固定我自己的錯誤。 問題實際上在我一直提供的代碼中不可見。

我有一種方法,在任何繪圖之前更改self.image。因此,當我開始畫圖時,我分配給班級主體中的ClientDC的圖像與self.image不同。在圖像設置器中添加self.dc = wx.ClientDC(self.image)解決了我的問題。

我不明白爲什麼此代碼在MS Windows上執行時工作。這不應該從來沒有工作過。