PyBadge & PyGamer uses a 1.8" 160x128 to display graphics, messages, games what have you!
We use a wrapper library called Arcada to let you draw to the display, read buttons and sensors, manage the audio, etc. It also handles things like allocating a framebuffer and then drawing it on command, either as a blocking function (waits until drawing is complete to return) or non-blocking (returns immediately, DMA will draw in the background)
Arcada is a direct subclass of Adafruit_GFX, so if you want to use it to draw shapes and text, check out the GFX guide here first!
If you want to try out all the shapes and drawing capabilities, check out the Adafruit_Arcada->graphicstest example in the library.
The Adafruit_Arcada->mandelbrot example is a good demo to show how we allocate a full display buffer, do all our calculations, then draw it all at once.
arcada.createFrameBuffer(ARCADA_TFT_WIDTH, ARCADA_TFT_HEIGHT) to allocate a framebuffer in the arcada object, then request the pointer with
framebuffer = arcada.getFrameBuffer();
Fill it up with data and call
arcada.blitFrameBuffer(x, y, blocking); when its ready to draw all at once.