移植到python-gi时未知的Cairo上下文字段

时间:2016-03-24 22:42:43

标签: python gtk3 pycairo gpsd

我是GPSD的维护者。在得知pygtk的gobject绑定已被弃用之后,我试图将我们的Python测试客户端转发到python-gi。我使用pygi-convert.sh script轻松移植xgps,但现在我遇到了xgpsspeed的困难。

在xgpsspeed上运行pygi-convert.sh之后,我首先必须手动修复“expose_event”信号,将其更改为“draw”。我期待这一点,因为我必须在成功的xgps端口中做同样的事情。

运行修补版本会抛出此错误:

Traceback (most recent call last):
  File "./xgpsspeed", line 72, in draw
    event.area.x,
AttributeError: 'cairo.Context' object has no attribute 'area'

明确涉及方法处理程序中的这段代码:

def draw(self, _unused, event, _empty=None):
    self.cr = self.get_window().cairo_create()
    self.cr.rectangle(
        event.area.x,
        event.area.y,
        event.area.width,
        event.area.height
    )

我的搜索功能并没有让任何明显的理由让事件参数在3.x下传递给开罗上下文,而不是它预期的事件并且低于2.x.我只能猜测处理程序签名已经改变,但我找不到任何解决问题的文档。

1 个答案:

答案 0 :(得分:2)

回答我自己的问题,对于那些通过Google搜索找到此问题的人。

是的,draw方法在3.x中采用不同的签名。该签名包含Cairo上下文,但 Gdk公开事件,如2.x.

通过为sizer分配事件创建处理程序,我能够进入下一步:

def on_size_allocate(self, _unused, allocation): self.width = allocation.width self.height = allocation.height

然后将矩形绘制为

self.cr.rectangle(0, 0, self.width, self.height)

这样我实际上不再需要公开事件内容了。

然而,为x,y args插入0只是猜测该方法采用相对坐标并且可能是错误的。

关于这些内容的文档可怕