2010-12-08 2 views
2

В настоящее время я рисую некоторые вещи в подклассе DrawingArea, где я получаю контекст cairo внутри события expose и вызываю метод draw оттуда. (в соответствии с некоторыми инструкциями PyGTK, которые я нашел)(Py) GTK: Как я могу заставить мое окно перекрасить/вызывать событие-событие?

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

ответ

0

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

6

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

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

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

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

+0

Мне пришлось заставить очередь обрабатывать с помощью: gtk.main_iteration_do (True), как указано в: http://stackoverflow.com/questions/8381631/how-do-i-update-redraw-a-gtk- виджет-GtkLabel-внутренне-без-а-ключ-пресс-ев – krumpelstiltskin 2015-05-21 13:03:15

Смежные вопросы