""" Display Hooks for pycairo, cairocffi Surfaces and Contexts. """ from io import BytesIO from IPython.core import display def display_cairo_surface(surface): """Displayhook function for Surfaces Images, rendered as PNG.""" b = BytesIO() surface.write_to_png(b) b.seek(0) data = b.read() ip_img = display.Image(data=data, format='png', embed=True) return ip_img._repr_png_() def display_cairo_context(ctx): """Displayhook function for cairo Context Images, target is rendered as PNG.""" surface = ctx.get_target() return display_cairo_surface(surface) # register display func with PNG formatter: png_formatter = get_ipython().display_formatter.formatters['image/png'] try: import cairo dpi = png_formatter.for_type(cairo.Surface, display_cairo_surface) dpi = png_formatter.for_type(cairo.Context, display_cairo_context) except ImportError: pass try: import cairocffi dpi = png_formatter.for_type(cairocffi.Surface, display_cairo_surface) dpi = png_formatter.for_type(cairocffi.Context, display_cairo_context) except ImportError: pass # Example cairo code. import cairo width, height = 100, 50 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) cr = cairo.Context(surface) cr.set_source_rgb(0.7, 0.9, 0.0) cr.rotate(-45) cr.rectangle(0, 0, 40, 40) cr.fill() # The context will output in the cell cr # as wil surfaces surface