Flash LEDS for POV setup
A couple of suggestions.

Throttle Infinite Loops:

The button loop has no throttle on its CPU usage.  If no buttons are pressed it is constantly doing IO.  If you reformulate the loop without any of the buttons being pressed the effective code looks like:

while True:
    GPIO.input(B1)
    GPIO.input(B2)
    GPIO.input(B3)


This code never gives the CPU a rest.  It should probably be more like:

while True:
    GPIO.input(B1)
    GPIO.input(B2)
    GPIO.input(B3)
    time.sleep(0.05)


Picking the actual sleep() time will depend on the system, but hopefully this demonstrates the likely problem.

So the loop with the if statements will look like:

while True:
    if GPIO.input(B1):
        ...

    if GPIO.input(B2):
        ...

    if GPIO.input(B3):
        ...

    time.sleep(0.05)


Use List Properties for Length Management

This code is using a variable to get the current pattern:

cpat = cpat + 1
if cpat &gt;= numpats:
    cpat = 0


This can be more cleanly done with:

cpat = (cpat + 1) % len(colors)


The change removes two lines of code, and sets the variable limit based on the list indices, which can avoid bugs later.