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

标签 python gtk3 pycairo gpsd

我是 GPSD 的维护者。得知 pygtk 的 gobject 绑定(bind)已被弃用后,我尝试将 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
    )

我的 search-fu 没有发现任何明显的原因,导致事件参数在 3.x 下传递到 Cairo 上下文,而不是它所期望的并在 2.x 下传递的事件。我只能猜测处理程序签名已更改,但我找不到任何解决该问题的文档。

最佳答案

为通过 Google 搜索找到此内容的任何人回答我自己的问题。

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

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

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

然后将矩形绘制写为

self.cr.矩形(0, 0, self.宽度, self.高度)

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

但是,为 x,y 参数插入 0 只是一种猜测,该方法采用相对坐标,可能会出现微妙的错误。

关于这些东西的文档很糟糕

关于python - 移植到 python-gi 时未知的 Cairo 上下文字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36211214/

相关文章:

python - 在 Python 中实现传输层安全 - 简单的邮件客户端

css - 如何仅更改一个选项卡的颜色 GtkNotebook

c - 编辑 gtkcellrenderertext

python - osx 中的 rsvg python 内存泄漏(ctypes?)

python - django admin raw_id 在 django 1.6.x 上以 ?e=1 打开

python - 如何获得插入计算机的可移动驱动器列表?

c - 如何使用 gtk3 在 gtk_dialog 窗口中打包小部件

python - 生成字体名称无法正确解码的字符图像

python - 安装pycairo时找不到python3

python - 绘制日期时间数据帧会导致错误 View 限制最小值 -36495.50013946759 小于 1