Как заставить PyGTK и Cairo работать параллельно?

это может выглядеть так, как будто этот вопрос уже появился, и на самом деле он уже был затронут в этой теме Параллельное рисование с GTK и Cairo в Python 3. Но возможно ли другое решение этой проблемы?

Для начала я создал пользовательский интерфейс в PyGtk с моими пользовательскими анимациями, выполняемыми с использованием потоковой передачи (Gtk.threads_enter () и Gtk.threads_leave ()). Работает хорошо и ошибок не выдает. Я также хотел добавить какое-то облако точек и увидел, что Cairo может подойти для этого с предположительно поддержкой Gtk.DrawingArea для его обработки.

Здесь начинается проблема. Поскольку Cairo использует событие рисования и в значительной степени переопределяет его, он рисует поверх моего пользовательского интерфейса изображение, которое я создал для Gtk.DrawingArea. Изображение рисунка cairo поверх пользовательского интерфейса

Таким образом, изображение появляется в DrawingArea и снова рисуется поверх каждого элемента пользовательского интерфейса. Я использовал это руководство https://blog.fossasia.org/creating-animations-in-gtk-with-pycairo-in-susi-linux-app/, чтобы нарисовать каирскую анимацию.

Есть ли способ каким-то образом сделать вызовы рисования из PyGTK для перерисовки элементов пользовательского интерфейса, чтобы они не перерисовывались Каиром?


person WakeCaine    schedule 08.08.2019    source источник


Ответы (1)


Я ответил на свой вопрос. Вызов Draw должен быть в отдельном классе для DrawingArea, как в примере https://blog.fossasia.org/creating-animations-in-gtk-with-pycairo-in-susi-linux-app/

Я попытался связать его с моим собственным основным классом, но затем он перерисовывал все окно вместо перерисовки только DrawingArea. Поэтому, когда вы хотите использовать Cairo, не забудьте сделать DrawingArea настраиваемым классом.

person WakeCaine    schedule 08.08.2019