Skip to content

Instantly share code, notes, and snippets.

@silverkors
Created November 20, 2012 21:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save silverkors/4121332 to your computer and use it in GitHub Desktop.
Save silverkors/4121332 to your computer and use it in GitHub Desktop.
Create an iPhone US keyboard with Pythonista
# -*- coding: utf-8 -*-
from scene import *
from PIL import Image, ImageDraw, ImageFont
row_rects = []
row_keys = []
n_row_rects = []
n_row_keys = []
row1_rects = []
i=0
while i < 10:
row1_rects.append(Rect(32*i,157,30,40))
i += 1
row1_keys = ['q','w','e','r','t','y','u','i','o','p']
row_rects.append(row1_rects)
row_keys.append(row1_keys)
row2_rects = []
i=0
while i < 9:
row2_rects.append(Rect(16+32*i,105,30,40))
i += 1
row2_keys = ['a','s','d','f','g','h','j','k','l']
row_rects.append(row2_rects)
row_keys.append(row2_keys)
row3_rects = [Rect(0,53,39,40)]
i=0
while i < 7:
row3_rects.append(Rect(48+32*i,53,30,40))
i += 1
row3_rects.append(Rect(280,53,39,40))
row3_keys = ['shift','z','x','c','v','b','n','m','backspace']
row_rects.append(row3_rects)
row_keys.append(row3_keys)
row4_rects = [Rect(0,0,78,40), Rect(80,0,160,40), Rect(242,0,77,40)]
row4_keys = ['mode','space','return']
row_rects.append(row4_rects)
row_keys.append(row4_keys)
n_row1_rects = []
i=0
while i < 10:
n_row1_rects.append(Rect(32*i,157,30,40))
i += 1
n_row1_keys = ['1','2','3','4','5','6','7','8','9','0']
n_row_rects.append(n_row1_rects)
n_row_keys.append(n_row1_keys)
n_row2_rects = []
i=0
while i < 10:
n_row2_rects.append(Rect(32*i,105,30,40))
i += 1
n_row2_keys = ['-','/',':',';','(',')','$','&','@','"']
n_row_rects.append(n_row2_rects)
n_row_keys.append(n_row2_keys)
n_row3_rects = [Rect(0,53,39,40)]
i=0
while i < 5:
n_row3_rects.append(Rect(56+42*i,53,40,40))
i += 1
n_row3_rects.append(Rect(280,53,39,40))
n_row3_keys = ['#+=','.',',','?','!',"'",'backspace']
n_row_rects.append(n_row3_rects)
n_row_keys.append(n_row3_keys)
n_row4_rects = [Rect(0,0,78,40), Rect(80,0,160,40), Rect(242,0,77,40)]
n_row4_keys = ['mode','space','return']
n_row_rects.append(n_row4_rects)
n_row_keys.append(n_row4_keys)
class MyScene (Scene):
def setup(self):
self.im = Image.new("RGBA", (320, 250), "black")
il = ImageDraw.Draw(self.im)
#il.rectangle((0,0,self.im.size[0]/2,self.im.size[1]-10), outline=(200,0,0), fill=0)
font = ImageFont.truetype("Helvetica", 24)
# il.text((10, 10), "Hello World", font=font, fill=(0,256,256))
i = 0
while i < len(row_rects):
n = 0
while n < len(row_rects[i]):
t = row_keys[i][n]
if t == 'shift':
t = '^'
elif t == 'backspace':
t = '<=]'
elif t == 'mode':
t = '123'
elif t == 'backspace':
t = 'space'
s = il.textsize(t, font=font)
dx = (row_rects[i][n].w-s[0])/2
dy = (row_rects[i][n].h-s[1])/2
il.rectangle([(row_rects[i][n].x, 200- row_rects[i][n].y), (row_rects[i][n].x+row_rects[i][n].w, 200- row_rects[i][n].y+row_rects[i][n].h)], outline=(256,0,0), fill=(0,0,0))
il.text((row_rects[i][n].x +dx, 200- row_rects[i][n].y+dy), t, font=font, fill=(256,256,256))
n += 1
i += 1
del il
self.i=load_pil_image(self.im)
self.im.save('kbd.png', "PNG")
#####################################
self.nim = Image.new("RGBA", (320, 250), "black")
il = ImageDraw.Draw(self.nim)
#il.rectangle((0,0,self.nim.size[0]/2,self.nim.size[1]-10), outline=(200,0,0), fill=0)
# il.text((10, 10), "Hello World", font=font, fill=(0,256,256))
i = 0
while i < len(n_row_rects):
n = 0
while n < len(n_row_rects[i]):
t = n_row_keys[i][n]
if t == 'backspace':
t = '<=]'
elif t == 'mode':
t = 'ABC'
elif t == 'backspace':
t = 'space'
s = il.textsize(t, font=font)
dx = (n_row_rects[i][n].w-s[0])/2
dy = (n_row_rects[i][n].h-s[1])/2
il.rectangle([(n_row_rects[i][n].x, 200- n_row_rects[i][n].y), (n_row_rects[i][n].x+n_row_rects[i][n].w, 200- n_row_rects[i][n].y+n_row_rects[i][n].h)], outline=(256,0,0), fill=(0,0,0))
il.text((n_row_rects[i][n].x +dx, 200- n_row_rects[i][n].y+dy), t, font=font, fill=(256,256,256))
n += 1
i += 1
del il
self.ni=load_pil_image(self.nim)
self.nim.save('nkbd.png', "PNG")
def draw(self):
background(0, 1, 0)
fill(1, 0, 0)
image(self.i,0,0,320,250)
image(self.ni,0,300,320,250)
w, h = self.size.w, self.size.h
#rect(w * 0.5 - 100, h * 0.5 - 100, 200, 200)
run(MyScene())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment