使用wxpython(跨平台)绘制位图

时间:2013-12-15 09:30:25

标签: python wxpython cross-platform device-context

我知道这个任务有几百个例子,但我没有设法将这些例子应用于我的具体问题。正如您在下面的代码中看到的,我试图在位图“self.image”上绘制一个多边形。这段代码在MS Windows上运行得非常好。在Linux上,此代码不会绘制多边形。

根据这个How to draw text in a bitmap using wxpython?,我试图像MemoryDC那样使用不同的“dcs”  但结果是一样的。

我的问题是: 为什么我的代码在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)

1 个答案:

答案 0 :(得分:0)

我自己修复了这个bug。 这个问题实际上在我提供的代码中看不到。

我有一个方法在进行任何绘图之前更改self.image。因此,当我开始绘制时,我在类主体中分配给ClientDC的图像与self.image的图像不同。在图像设置器中添加self.dc = wx.ClientDC(self.image)解决了我的问题。

我不明白为什么这个代码在MS Windows上执行时有效。这首先不应该是有效的。

相关问题