from tkinter import *
from time import *
import threading, sys

time_step = 0.1
killed = False
root = Tk()

def finish():
  global killed
  killed = True
  sys.exit(0)

def butClick(e): 
  finish()

x = 1
y = 1
k = 0
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
size = 5

def handleKey(e):
  global k
  if e.char == 'q': finish()
  if e.char == 'w': k = 3
  if e.char == 's': k = 2
  if e.char == 'a': k = 1
  if e.char == 'd': k = 0

root.title("Snake")
root.bind("<Key>", handleKey); 
root.geometry("500x500")

but = Button(root,
  text="Exit", 
  width=30,height=4,
  bg="white",fg="red"
)

but.bind("<Button-1>", butClick); 
but.pack()

label = Label(root, text="Press a-w-s-d", fg='red', bg='white')
label.pack()

w = Canvas(root, width=200, height=100)
w.create_rectangle(2, 2, 200, 100, fill="#8888ff", outline="#0000ff")
w.pack()

def draw():
  global x, y, k, dx, dy, size, killed
  while not killed:
    w.create_rectangle(x * size, y * size, (x + 1) * size, (y + 1) * size, fill="#ff0000")
    x += dx[k]
    y += dy[k]
    sleep(time_step)
  
threading.Thread(target=draw).start()

# Start the window's event-loop
root.mainloop()