kopia lustrzana https://github.com/pimoroni/pimoroni-pico
91 wiersze
3.3 KiB
Python
91 wiersze
3.3 KiB
Python
|
# A name badge with customisable Pride flag background.
|
||
|
|
||
|
from picographics import PicoGraphics, DISPLAY_TUFTY_2040
|
||
|
|
||
|
display = PicoGraphics(display=DISPLAY_TUFTY_2040)
|
||
|
|
||
|
WIDTH, HEIGHT = display.get_bounds()
|
||
|
|
||
|
# List of available pen colours, add more if necessary
|
||
|
RED = display.create_pen(209, 34, 41)
|
||
|
ORANGE = display.create_pen(246, 138, 30)
|
||
|
YELLOW = display.create_pen(255, 216, 0)
|
||
|
GREEN = display.create_pen(0, 121, 64)
|
||
|
INDIGO = display.create_pen(36, 64, 142)
|
||
|
VIOLET = display.create_pen(115, 41, 130)
|
||
|
WHITE = display.create_pen(255, 255, 255)
|
||
|
PINK = display.create_pen(255, 175, 200)
|
||
|
BLUE = display.create_pen(116, 215, 238)
|
||
|
BROWN = display.create_pen(97, 57, 21)
|
||
|
BLACK = display.create_pen(0, 0, 0)
|
||
|
MAGENTA = display.create_pen(255, 33, 140)
|
||
|
CYAN = display.create_pen(33, 177, 255)
|
||
|
|
||
|
# Uncomment one of these to change flag
|
||
|
# If adding your own, colour order is left to right (or top to bottom)
|
||
|
COLOUR_ORDER = [RED, ORANGE, YELLOW, GREEN, INDIGO, VIOLET] # traditional pride flag
|
||
|
# COLOUR_ORDER = [BLACK, BROWN, RED, ORANGE, YELLOW, GREEN, INDIGO, VIOLET] # Philadelphia pride flag
|
||
|
# COLOUR_ORDER = [BLUE, PINK, WHITE, PINK, BLUE] # trans flag
|
||
|
# COLOUR_ORDER = [MAGENTA, YELLOW, CYAN] # pan flag
|
||
|
# COLOUR_ORDER = [MAGENTA, VIOLET, INDIGO] # bi flag
|
||
|
|
||
|
# Change this for vertical stripes
|
||
|
STRIPES_DIRECTION = "horizontal"
|
||
|
|
||
|
# Change details here! Works best with a short, one word name
|
||
|
NAME = "Hel"
|
||
|
PRONOUNS = "She/they"
|
||
|
|
||
|
# Change the colour of the text (swapping these works better on a light background)
|
||
|
TEXT_COLOUR = WHITE
|
||
|
DROP_SHADOW_COLOUR = BLACK
|
||
|
|
||
|
# Draw the flag
|
||
|
if STRIPES_DIRECTION == "horizontal":
|
||
|
stripe_width = round(HEIGHT / len(COLOUR_ORDER))
|
||
|
for x in range(len(COLOUR_ORDER)):
|
||
|
display.set_pen(COLOUR_ORDER[x])
|
||
|
display.rectangle(0, stripe_width * x, WIDTH, stripe_width)
|
||
|
|
||
|
if STRIPES_DIRECTION == "vertical":
|
||
|
stripe_width = round(WIDTH / len(COLOUR_ORDER))
|
||
|
for x in range(len(COLOUR_ORDER)):
|
||
|
display.set_pen(COLOUR_ORDER[x])
|
||
|
display.rectangle(stripe_width * x, 0, stripe_width, HEIGHT)
|
||
|
|
||
|
# Set a starting scale for text size.
|
||
|
# This is intentionally bigger than will fit on the screen, we'll shrink it to fit.
|
||
|
name_size = 20
|
||
|
pronouns_size = 20
|
||
|
|
||
|
# These loops adjust the scale of the text until it fits on the screen
|
||
|
while True:
|
||
|
display.set_font("bitmap8")
|
||
|
name_length = display.measure_text(NAME, name_size)
|
||
|
if name_length >= WIDTH - 20:
|
||
|
name_size -= 1
|
||
|
else:
|
||
|
# comment out this section if you hate drop shadow
|
||
|
DROP_SHADOW_OFFSET = 5
|
||
|
display.set_pen(DROP_SHADOW_COLOUR)
|
||
|
display.text(NAME, int((WIDTH - name_length) / 2 + 10) - DROP_SHADOW_OFFSET, 10 + DROP_SHADOW_OFFSET, WIDTH, name_size)
|
||
|
|
||
|
# draw name and stop looping
|
||
|
display.set_pen(TEXT_COLOUR)
|
||
|
display.text(NAME, int((WIDTH - name_length) / 2 + 10), 10, WIDTH, name_size)
|
||
|
break
|
||
|
|
||
|
while True:
|
||
|
display.set_font("bitmap8")
|
||
|
pronouns_length = display.measure_text(PRONOUNS, pronouns_size)
|
||
|
if pronouns_length >= WIDTH - 60:
|
||
|
pronouns_size -= 1
|
||
|
else:
|
||
|
# draw pronouns and stop looping
|
||
|
display.set_pen(TEXT_COLOUR)
|
||
|
display.text(PRONOUNS, int((WIDTH - pronouns_length) / 2), 175, WIDTH, pronouns_size)
|
||
|
break
|
||
|
|
||
|
# Once all the adjusting and drawing is done, update the display.
|
||
|
display.update()
|