如何在不调用gtk.main_iteration的情况下重绘python中的gtk小部件?

时间:2015-04-01 15:52:36

标签: python events widget gtk redraw

我的应用程序有一个处理按键事件的窗口。当用户按下一个键我运行一些长任务时,在任务期间我更新窗口上的标签。要在任务仍在运行时更新标签,请调用以下代码。 而gtk.events_pending():     gtk.main_iteration(假)

这会更新标签,但问题是它会处理所有事件,包括按键。如果用户在任务正在运行时按一个键,则调用main_iteration start处理该任务。我希望它只应更新标签,但不应处理任何其他事件。任务完成后应处理这些事件。

执行此操作的一种方法是删除按键处理程序或在该按键处理程序中检查任务是否正在运行然后忽略按键按下但这样会导致按键丢失。我想以某种方式它应该只更新标签但留下其他事件,并且应该在任务完成并且应用程序变为空闲之后处理这些事件。有没有办法做到这一点?

由于

1 个答案:

答案 0 :(得分:1)

您需要.queue_draw()和相关的GtkWidget方法。请注意,当您返回主循环时,这些将标记您的小部件需要重绘;我不认为GTK +有一种方法可以立即绘制 (但是标记为脏,并且在系统准备就绪时让系统重绘通常会因为优化原因而更好。)