(Py)GTK:如何强制重新绘制窗口/调用expose-event?

oti*_*rra 2 python gtk drawing pygtk

目前我正在DrawingArea的子类中绘制一些东西,在那里我在一个expose-event中获得一个cairo上下文并从那里调用一个draw方法.(根据我发现的一些PyGTK教程)

我习惯用java做一个repaint(),但是我怎么能在这里得到相同的效果呢?

And*_*Dog 6

queue_draw正如您所建议的那样使用(实际上是为每个小部件定义的)是异步执行它的正确方法.该文件明确指出这一点:

不推荐使用gtk_widget_draw,不应在新编写的代码中使用.

在GTK + 1.2中,此函数将通过调用窗口小部件的虚拟绘制方法立即呈现窗口小部件的区域区域.在GTK + 2.0中,draw方法消失了,而gtk_widget_draw()只是使窗口小部件的指定区域无效,然后立即更新窗口小部件的无效区域.通常您不希望出于性能原因立即更新区域,因此一般来说,如果要绘制窗口小部件的区域,gtk_widget_queue_draw_area()是更好的选择.

如果您担心绘图延迟太高,那么您应该只对需要重绘的区域(使用queue_draw_area)进行无效处理,而不是同步绘制.