Two ways…
OneUndo decorater by Cesar Saez
from functools import wraps def OneUndo(function): @wraps(function) def _inner(*args, **kwargs): try: Application.BeginUndo() f = function(*args, **kwargs) finally: Application.EndUndo() return f return _inner # # And a basic example... # @OneUndo def CreateNulls(p_iCounter=100): lNulls = [] for i in range(p_iCounter): lNulls.append( Application.ActiveSceneRoot.AddNull() ) return lNulls CreateNulls()
Undo with statement by ethivierge
from win32com.client import constants as c from win32com.client.dynamic import Dispatch as d xsi = Application log = xsi.LogMessage collSel = xsi.Selection class xsiUndo(): def __enter__(self): xsi.BeginUndo() def __exit__(self, type, value, traceback): xsi.EndUndo() def testFunc(): log("running test") with xsiUndo(): testFunc()