2016-03-24 9 views
1

Я являюсь хранителем GPSD. Узнав, что привязки gobject для pygtk устарели, я пытаюсь перенаправить наши тестовые клиенты Python на python-gi. Я портировал xgps с небольшими трудностями, используя pygi-convert.sh script, но теперь я испытываю трудности с xgpsspeed.Неизвестное поле контекста Каира при портировании на python-gi

После запуска pygi-convert.sh на xgpsspeed, я сначала должен зафиксировать сигнал «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. Я могу только догадываться, что подпись обработчика изменилась, но я не могу найти документацию, которая решает вопрос.

ответ

2

Ответьте на мой вопрос, для тех, кто находит это через поиск Google.

Да, метод draw принимает другую подпись в 3.x. Эта подпись включает контекст Каира, но не событие Gdk выставляет событие, как в 2.x.

Я был в состоянии получить к следующему шагу, создав обработчик для события выделения Сайзер:

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

, а затем писать прямоугольник рисовать, как

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

Таким образом, Мне больше не нужно было раскрывать содержание событий.

Однако вставка 0s для x, y args была просто предположением, что метод принимает относительные координаты и может быть ошибочным.

Документация по этому материалу ужасно.