forked from wbhima/CodeforALL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FaceScreenPet.py
109 lines (94 loc) · 3.93 KB
/
FaceScreenPet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from tkinter import HIDDEN, NORMAL, Tk, Canvas
def toggle_eyes():
current_color = c.itemcget(eye_left, 'fill')
new_color = c.body_color if current_color == 'white' else 'white'
current_state = c.itemcget(pupil_left, 'state')
new_state = NORMAL if current_state == HIDDEN else HIDDEN
c.itemconfigure(pupil_left, state=new_state)
c.itemconfigure(pupil_right, state=new_state)
c.itemconfigure(eye_left, fill=new_color)
c.itemconfigure(eye_right, fill=new_color)
def blink():
toggle_eyes()
root.after(250, toggle_eyes)
root.after(3000, blink)
def toggle_pupils():
if not c.eyes_crossed:
c.move(pupil_left, 10, -5)
c.move(pupil_right, -10, -5)
c.eyes_crossed = True
else:
c.move(pupil_left, -10, 5)
c.move(pupil_right, 10, 5)
c.eyes_crossed = False
def toggle_tongue():
if not c.tongue_out:
c.itemconfigure(tongue_tip, state=NORMAL)
c.itemconfigure(tongue_main, state=NORMAL)
c.tongue_out = True
else:
c.itemconfigure(tongue_tip, state=HIDDEN)
c.itemconfigure(tongue_main, state=HIDDEN)
c.tongue_out = False
def cheeky(event):
toggle_tongue()
toggle_pupils()
hide_happy(event)
root.after(1000, toggle_tongue)
root.after(1000, toggle_pupils)
return
def show_happy(event):
if (20 <= event.x and event.x <= 350) and (20 <= event.y and event.y <= 350):
c.itemconfigure(cheek_left, state=NORMAL)
c.itemconfigure(cheek_right, state=NORMAL)
c.itemconfigure(mouth_happy, state=NORMAL)
c.itemconfigure(mouth_normal, state=HIDDEN)
c.itemconfigure(mouth_sad, state=HIDDEN)
c.happy_level = 10
return
def hide_happy(event):
c.itemconfigure(cheek_left, state=HIDDEN)
c.itemconfigure(cheek_right, state=HIDDEN)
c.itemconfigure(mouth_happy, state=HIDDEN)
c.itemconfigure(mouth_normal, state=NORMAL)
c.itemconfigure(mouth_sad, state=HIDDEN)
return
def sad():
if c.happy_level == 0:
c.itemconfigure(mouth_happy, state=HIDDEN)
c.itemconfigure(mouth_normal, state=HIDDEN)
c.itemconfigure(mouth_sad, state=NORMAL)
else:
c.happy_level -= 1
root.after(5000, sad)
root = Tk()
root.title("Screen pet")
c = Canvas(root, width=400, height=400)
c.configure(bg='dark blue', highlightthickness=0)
c.body_color = 'SkyBlue1'
body = c.create_oval(35, 20, 365, 350, outline=c.body_color, fill=c.body_color)
ear_left = c.create_polygon(75, 80, 75, 10, 165, 70, outline=c.body_color, fill=c.body_color)
ear_right = c.create_polygon(255, 45, 325, 10, 320, 70, outline=c.body_color, fill=c.body_color)
foot_left = c.create_oval(65, 320, 145, 360, outline=c.body_color, fill=c.body_color)
foot_right = c.create_oval(250, 320, 330, 360, outline=c.body_color, fill=c.body_color)
eye_left = c.create_oval(130, 110, 160, 170, outline='black', fill='white')
pupil_left = c.create_oval(140, 145, 150, 155, outline='black', fill='black')
eye_right = c.create_oval(230, 110, 260, 170, outline='black', fill='white')
pupil_right = c.create_oval(240, 145, 250, 155, outline='black', fill='black')
mouth_normal = c.create_line(170, 250, 200, 272, 230, 250, smooth=1, width=2, state=NORMAL)
mouth_happy = c.create_line(170, 250, 200, 282, 230, 250, smooth=1, width=2, state=HIDDEN)
mouth_sad = c.create_line(170, 250, 200, 232, 230, 250, smooth=1, width=2, state=HIDDEN)
tongue_main = c.create_rectangle(170, 250, 230, 290, outline='red', fill='red', state=HIDDEN)
tongue_tip = c.create_oval(170, 285, 230, 300, outline='red', fill='red', state=HIDDEN)
cheek_left = c.create_oval(70, 180, 120, 230, outline='pink', fill='pink', state=HIDDEN)
cheek_right = c.create_oval(280, 180, 330, 230, outline='pink', fill='pink', state=HIDDEN)
c.pack()
c.bind('<Motion>', show_happy)
c.bind('<Leave>', hide_happy)
c.bind('<Double-1>', cheeky)
c.happy_level = 10
c.eyes_crossed = False
c.tongue_out = False
root.after(1000, blink)
root.after(5000, sad)
root.mainloop()