{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from ipycanvas import Canvas, hold_canvas\n", "\n", "canvas = Canvas(width=600, height=600)\n", "canvas.fill_style = \"#584f4e\"\n", "canvas.fill_rect(0, 0, 600, 600)\n", "\n", "\n", "objects_to_draw = []\n", "\n", "\n", "class Square_obj:\n", " def __init__(self, x, y, width=100, height=40):\n", " self.x = x\n", " self.y = y\n", " self.width = width\n", " self.height = height\n", " self.selected = False\n", " objects_to_draw.append(self)\n", "\n", " def set_x_y(self, x_in, y_in):\n", " self.x = x_in\n", " self.y = y_in\n", "\n", " def draw(self):\n", " canvas.fill_style = \"#38a8a4\"\n", " canvas.fill_rect(\n", " self.x - (self.width * 0.5), self.y - (self.height), self.width, self.height\n", " )\n", " if self.selected:\n", " canvas.fill_style = \"#9dcea6\"\n", " else:\n", " canvas.fill_style = \"#dee7bc\"\n", " canvas.fill_rect(\n", " self.x - (self.width * 0.5),\n", " self.y - (self.height * 0.5),\n", " self.width,\n", " self.height,\n", " )\n", "\n", " def is_selected(self, x_in, y_in):\n", " x_coord = self.x - (self.width * 0.5)\n", " y_coord = self.y - (self.height * 0.5)\n", "\n", " if (\n", " x_in > x_coord\n", " and x_in < (x_coord + self.width)\n", " and y_in > y_coord\n", " and y_in < (y_coord + self.height)\n", " ):\n", " self.set_selected(True)\n", " return True\n", " else:\n", " self.set_selected(False)\n", " return False\n", "\n", " def set_selected(self, state):\n", " self.selected = state\n", "\n", "\n", "def canvas_restart():\n", " canvas.clear()\n", " canvas.fill_style = \"#584f4e\"\n", " canvas.fill_rect(0, 0, 600, 600)\n", "\n", "\n", "def handle_mouse_down(x, y):\n", " if [o for o in objects_to_draw if o.selected]:\n", " [o.set_selected(False) for o in objects_to_draw if o.selected]\n", " return False\n", "\n", " check_bool_pos = list(\n", " set([check_region.is_selected(x, y) for check_region in objects_to_draw])\n", " )\n", " if len(check_bool_pos) == 1:\n", " if check_bool_pos[0] == False:\n", " s = Square_obj(x, y)\n", " s.set_selected(False)\n", " s.draw()\n", "\n", " else:\n", " canvas_restart()\n", " [o.draw() for o in objects_to_draw]\n", "\n", " if len(check_bool_pos) == 0:\n", " s = Square_obj(x, y)\n", " s.set_selected(False)\n", " s.draw()\n", "\n", "\n", "def handle_mouse_move(x, y):\n", " if [o for o in objects_to_draw if o.selected]:\n", " with hold_canvas():\n", " [o for o in objects_to_draw if o.selected][-1].set_x_y(x, y)\n", " canvas_restart()\n", " [o.draw() for o in objects_to_draw]\n", "\n", "\n", "canvas.on_mouse_down(handle_mouse_down)\n", "canvas.on_mouse_move(handle_mouse_move)\n", "\n", "\n", "canvas" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.0" } }, "nbformat": 4, "nbformat_minor": 2 }