-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbutton.py
More file actions
69 lines (57 loc) · 2.3 KB
/
button.py
File metadata and controls
69 lines (57 loc) · 2.3 KB
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
import pygame
import string
TEXT_BOX_CHARACTERS = string.ascii_lowercase + " "
class TextBox:
def __init__(self, pos, font, colour=(255, 255, 255), text_colour=(0, 0, 0)):
self.text = ""
self.pos = pos
self.colour = colour
self.font = font
self.text_colour = text_colour
self.update_size()
self.active = False
def draw(self, surface):
self.update_size()
text = self.font.render(self.text, False, self.text_colour)
if self.active:
pygame.draw.rect(surface, (255, 150, 150), (self.pos[0], self.pos[1], self.size[0], self.size[1]), width=0)
pygame.draw.rect(surface, self.colour, (self.pos[0], self.pos[1], self.size[0], self.size[1]), width=3)
surface.blit(text, (self.pos[0]+5, self.pos[1]))
def update_size(self):
self.size = self.font.size(self.text)
self.size = (self.size[0]+10, self.size[1])
def on_click(self, x, y):
if self.pos[0] <= x <= self.pos[0]+self.size[0]:
if self.pos[1] <= y <= self.pos[1] + self.size[1]:
self.active = not self.active
else:
self.active = False
else:
self.active = False
def on_key(self, key ,keys):
if self.active:
if key == keys.BACKSPACE:
self.text = self.text[:-1]
try:
if chr(key) in TEXT_BOX_CHARACTERS:
self.text = self.text + chr(key)
except ValueError:
pass
class Button:
def __init__(self, text, func, pos, font, colour=(255, 255, 255), text_colour=(0, 0, 0)):
self.text = text
self.func = func
self.pos = pos
self.colour = colour
self.font = font
self.text_colour = text_colour
self.size = font.size(text)
self.size = (self.size[0]+10, self.size[1])
def draw(self, surface):
text = self.font.render(self.text, False, self.text_colour)
pygame.draw.rect(surface, self.colour, (self.pos[0], self.pos[1], self.size[0], self.size[1]), width=3)
surface.blit(text, (self.pos[0]+5, self.pos[1]))
def on_click(self, x, y):
if self.pos[0] <= x <= self.pos[0]+self.size[0]:
if self.pos[1] <= y <= self.pos[1] + self.size[1]:
self.func()