-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathKey.py
More file actions
110 lines (101 loc) · 4.53 KB
/
Key.py
File metadata and controls
110 lines (101 loc) · 4.53 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
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
110
from Function import square_distance
class Key:
def __init__(self, master, canvas):
self.canvas = canvas
self.master = master
self.window = master.gui.window
self.function = None
self.event = None
self.pos = None
self.mark = None
def key_map(self, function):
self.function = function
if self.function == 'set_detect':
self.window.bind('<space>', self.key)
self.window.bind('<c>', self.key)
elif self.function == 'detect':
self.window.bind('<p>', self.key)
self.window.bind('<c>', self.key)
self.window.bind('<i>', self.key)
self.window.bind('<l>', self.key)
self.window.bind('<r>', self.key)
self.window.bind('<z>', self.key)
self.window.bind('<e>', self.key)
self.window.bind('<t>', self.key)
self.window.bind('<space>', self.key)
def access_event(self, event=None):
if event is None:
return self.event
self.event = event
def access_pos(self, pos=None):
if pos is None:
return self.pos
self.pos = pos
def key(self, event):
print(event, self.function)
if self.function == 'set_detect':
if event.keysym == 'space' and self.master.var['clicked']:
self.master.var['pick_hsv'] = self.master.var['hsv']
self.master.var['pick_roi'] = self.master.var['roi']
elif event.keysym == 'c':
self.master.var['run'] = False
elif self.function == 'detect':
if event.keysym == 't':
self.master.stop = not self.master.stop
elif event.keysym == 'z':
self.canvas.erase()
self.event = None
elif event.keysym == 'e':
self.canvas.clear()
self.event = None
elif event.keysym == 'space':
self.event = None
if self.pos is not None:
try:
pen = self.master.var['pen']
color = pen.access_color()
size = pen.access_size()
if event.keysym == 'p':
self.canvas.new_draw(['point', color, size, self.pos])
self.event = None
elif square_distance(self.pos, self.mark) != 0:
if event.keysym == 'c':
if self.event == '_c':
self.canvas.new_draw(['circle', color, size, self.mark, self.pos])
self.event = None
else:
self.event = '_c'
elif event.keysym == 'i':
if self.event == '__i':
inter = self.canvas.pop()
inter[3].append(self.pos[0])
inter[4].append(self.pos[1])
self.canvas.new_draw(inter)
elif self.event == '_i':
x = [self.mark[0], self.pos[0]]
y = [self.mark[1], self.pos[1]]
self.canvas.new_draw(['interpolate', color, size, x, y])
self.event = '__i'
else:
self.event = '_i'
elif event.keysym == 'l':
if self.event == '__l':
inter = self.canvas.pop()
inter[3].extend(self.pos)
self.canvas.new_draw(inter)
elif self.event == '_l':
p = self.mark + self.pos
self.canvas.new_draw(['line', color, size, p])
self.event = '__l'
else:
self.event = '_l'
elif event.keysym == 'r':
if self.event == '_r':
self.canvas.new_draw(['rectangle', color, size, self.mark, self.pos])
self.event = None
else:
self.event = '_r'
self.mark = self.pos
except AttributeError as e:
print('AttributeError; key', e)
return False