Skip to content

Commit 2bd4216

Browse files
authored
Merge pull request #93 from LucasSilvaFerreira/master
Drag and drop example
2 parents 0f22007 + 2a0bef9 commit 2bd4216

File tree

1 file changed

+153
-0
lines changed

1 file changed

+153
-0
lines changed
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 96,
6+
"metadata": {},
7+
"outputs": [
8+
{
9+
"data": {
10+
"application/vnd.jupyter.widget-view+json": {
11+
"model_id": "00466ac5fda94b54807244ade58dd848",
12+
"version_major": 2,
13+
"version_minor": 0
14+
},
15+
"text/plain": [
16+
"Canvas(height=600, width=600)"
17+
]
18+
},
19+
"metadata": {},
20+
"output_type": "display_data"
21+
}
22+
],
23+
"source": [
24+
"from ipycanvas import Canvas, hold_canvas\n",
25+
"\n",
26+
"canvas = Canvas(width=600, height=600)\n",
27+
"canvas.fill_style = '#584f4e'\n",
28+
"canvas.fill_rect(0, 0, 600, 600)\n",
29+
"\n",
30+
"\n",
31+
"\n",
32+
"objects_to_draw = []\n",
33+
"class Square_obj():\n",
34+
" def __init__(self, x,y, width=100, height=40):\n",
35+
" self.x = x\n",
36+
" self.y = y\n",
37+
" self.width = width\n",
38+
" self.height = height\n",
39+
" self.selected = False\n",
40+
" objects_to_draw.append(self)\n",
41+
" \n",
42+
" \n",
43+
" \n",
44+
" def set_x_y(self,x_in,y_in) :\n",
45+
" self.x = x_in\n",
46+
" self.y = y_in\n",
47+
" \n",
48+
" def draw(self):\n",
49+
" \n",
50+
" canvas.fill_style = '#38a8a4'\n",
51+
" canvas.fill_rect(self.x - (self.width*0.5), self.y - (self.height) , self.width, self.height)\n",
52+
" if self.selected:\n",
53+
" canvas.fill_style = '#9dcea6'\n",
54+
" else:\n",
55+
" canvas.fill_style = '#dee7bc'\n",
56+
" canvas.fill_rect(self.x - (self.width*0.5), self.y - (self.height*0.5) , self.width, self.height)\n",
57+
"\n",
58+
" \n",
59+
" \n",
60+
" def is_selected(self,x_in, y_in):\n",
61+
" x_coord = self.x - (self.width*0.5)\n",
62+
" y_coord = self.y - (self.height*0.5)\n",
63+
"\n",
64+
" if x_in > x_coord and x_in < (x_coord+ self.width) and y_in > y_coord and y_in < (y_coord + self.height):\n",
65+
" \n",
66+
" self.set_selected(True)\n",
67+
" return True\n",
68+
" else:\n",
69+
" self.set_selected(False)\n",
70+
" return False\n",
71+
" \n",
72+
" def set_selected(self,state):\n",
73+
" self.selected = state\n",
74+
"\n",
75+
"\n",
76+
"def canvas_restart():\n",
77+
" canvas.clear()\n",
78+
" canvas.fill_style = '#584f4e'\n",
79+
" canvas.fill_rect(0, 0, 600, 600)\n",
80+
"\n",
81+
"\n",
82+
"\n",
83+
"def handle_mouse_down(x, y):\n",
84+
" if [o for o in objects_to_draw if o.selected]:\n",
85+
" [o.set_selected(False) for o in objects_to_draw if o.selected]\n",
86+
" return False\n",
87+
" \n",
88+
" \n",
89+
" check_bool_pos = list(set([check_region.is_selected(x,y) for check_region in objects_to_draw]))\n",
90+
" if len(check_bool_pos)== 1:\n",
91+
" if check_bool_pos[0] == False: \n",
92+
" s = Square_obj(x,y)\n",
93+
" s.set_selected(False)\n",
94+
" s.draw()\n",
95+
" \n",
96+
" else:\n",
97+
" canvas_restart()\n",
98+
" [o.draw() for o in objects_to_draw]\n",
99+
" \n",
100+
" \n",
101+
" if len(check_bool_pos)== 0:\n",
102+
" s = Square_obj(x,y) \n",
103+
" s.set_selected(False)\n",
104+
" s.draw()\n",
105+
" \n",
106+
"\n",
107+
"def handle_mouse_move(x, y): \n",
108+
" if [o for o in objects_to_draw if o.selected]:\n",
109+
" with hold_canvas(canvas):\n",
110+
" [o for o in objects_to_draw if o.selected][-1].set_x_y(x,y)\n",
111+
" canvas_restart()\n",
112+
" [o.draw() for o in objects_to_draw]\n",
113+
"\n",
114+
"\n",
115+
" \n",
116+
" \n",
117+
"canvas.on_mouse_down(handle_mouse_down)\n",
118+
"canvas.on_mouse_move(handle_mouse_move)\n",
119+
"\n",
120+
"\n",
121+
"canvas"
122+
]
123+
},
124+
{
125+
"cell_type": "code",
126+
"execution_count": null,
127+
"metadata": {},
128+
"outputs": [],
129+
"source": []
130+
}
131+
],
132+
"metadata": {
133+
"kernelspec": {
134+
"display_name": "Python 3",
135+
"language": "python",
136+
"name": "python3"
137+
},
138+
"language_info": {
139+
"codemirror_mode": {
140+
"name": "ipython",
141+
"version": 3
142+
},
143+
"file_extension": ".py",
144+
"mimetype": "text/x-python",
145+
"name": "python",
146+
"nbconvert_exporter": "python",
147+
"pygments_lexer": "ipython3",
148+
"version": "3.7.3"
149+
}
150+
},
151+
"nbformat": 4,
152+
"nbformat_minor": 2
153+
}

0 commit comments

Comments
 (0)