import bpy class ModalTimerOperator(bpy.types.Operator): """Operator which runs its self from a timer""" bl_idname = "wm.modal_timer_operator" bl_label = "Modal Timer Operator" _timer = None def modal(self, context, event): if event.type == 'ESC': return self.cancel(context) if event.type == 'TIMER': # change theme color, silly! color = context.user_preferences.themes[0].view_3d.space.gradients.high_gradient color.s = 1.0 color.h += 0.01 return {'PASS_THROUGH'} def execute(self, context): self._timer = context.window_manager.event_timer_add(0.1, context.window) context.window_manager.modal_handler_add(self) return {'RUNNING_MODAL'} def cancel(self, context): context.window_manager.event_timer_remove(self._timer) return {'CANCELLED'} def register(): bpy.utils.register_class(ModalTimerOperator) def unregister(): bpy.utils.unregister_class(ModalTimerOperator) if __name__ == "__main__": register() # test call bpy.ops.wm.modal_timer_operator()