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

时间:2010-12-08 02:15:21

标签: python gtk drawing pygtk

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

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

2 个答案:

答案 0 :(得分: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)使其无效,而不是同步绘图。

答案 1 :(得分:0)

我找到了一个使用queue_draw()方法的解决方案(可以从Gtk.DrawingArea调用,但似乎是每个gtk小部件必须具有的方法),但是可能存在替代方案,因为这意味着它可能会延迟,即使在我的测试中它没有发生。