我知道这个任务有几百个例子,但我没有设法将这些例子应用于我的具体问题。正如您在下面的代码中看到的,我试图在位图“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)
答案 0 :(得分:0)
我自己修复了这个bug。 这个问题实际上在我提供的代码中看不到。
我有一个方法在进行任何绘图之前更改self.image
。因此,当我开始绘制时,我在类主体中分配给ClientDC的图像与self.image
的图像不同。在图像设置器中添加self.dc = wx.ClientDC(self.image)
解决了我的问题。
我不明白为什么这个代码在MS Windows上执行时有效。这首先不应该是有效的。