(Py) GTK: Как я могу заставить мое окно быть перекрашенным / вызвать expose-event? - PullRequest
2 голосов
/ 08 декабря 2010

В настоящее время я рисую некоторые вещи в подклассе DrawingArea, где я получаю контекст cairo внутри события expose и вызываю оттуда метод рисования. (согласно некоторому учебнику по PyGTK, который я нашел)

Я привык делать repaint () с Java, но как я могу получить такой же эффект здесь?

Ответы [ 2 ]

6 голосов
/ 08 декабря 2010

Использование queue_draw (которое фактически определено для каждого виджета), как вы предложили, является правильным способом сделать это асинхронно. Документация четко гласит:

gtk_widget_draw устарела и не должна использоваться во вновь создаваемом коде.

В GTK + 1.2 эта функция немедленно отображает область области виджета, вызывая метод виртуального рисования виджета. В GTK + 2.0 метод draw отсутствует, и вместо этого gtk_widget_draw () просто делает недействительной указанную область виджета, а затем немедленно обновляет недопустимую область виджета. Обычно вы не хотите обновлять регион сразу по соображениям производительности, поэтому в общем случае gtk_widget_queue_draw_area () - лучший выбор, если вы хотите нарисовать область виджета.

Если вы опасаетесь, что задержка рисования слишком велика, вместо того, чтобы рисовать синхронно, вы должны сделать недействительной только ту область, которую необходимо перерисовать (используя queue_draw_area).

0 голосов
/ 08 декабря 2010

Я нашел решение, которое использует метод queue_draw() (может вызываться из Gtk.DrawingArea, но кажется, что метод должен быть у каждого виджета gtk), но, вероятно, есть альтернативы, так как этот подразумевает, что он может быть отложен, даже если вмоих тестов не было.

...