From 399b82de92f508b8d96ea0c55d240ee09e0310b3 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Mon, 5 Apr 2021 19:19:14 +0400 Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D1=83=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python-graphics/main.py | 79 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 23 deletions(-) (limited to 'python-graphics/main.py') diff --git a/python-graphics/main.py b/python-graphics/main.py index db22eeb..99ec770 100644 --- a/python-graphics/main.py +++ b/python-graphics/main.py @@ -68,14 +68,14 @@ class PresetPlotFrame(tk.Frame): self.l_min.grid(row=1, column=0) self.min = tk.Entry(self) - self.min.grid(row=1, column=1) + self.min.grid(row=1, column=1, sticky=tk.W + tk.E) self.l_max = tk.Label(self) self.l_max["text"] = "max(x)" self.l_max.grid(row=2, column=0) self.max = tk.Entry(self) - self.max.grid(row=2, column=1) + self.max.grid(row=2, column=1, sticky=tk.W + tk.E) la = tk.Label(self) la["text"] = "a: " @@ -117,7 +117,7 @@ class PresetPlotFrame(tk.Frame): for i, (label, var) in enumerate(self.variables[new_type], 3): label.grid(row=i, column=0) - var.grid(row=i, column=1) + var.grid(row=i, column=1, sticky=tk.W + tk.E) def grid_size(self): return (4, 2) @@ -128,29 +128,49 @@ class PresetPlotFrame(tk.Frame): self.grid_columnconfigure(1, weight=4) def collect_info(self): - # TODO: Добавить валидацию данных в этих полях. cur_type = self.preset_type.get() v = self.variables[cur_type] + try: + min_x = float(self.min.get()) + except ValueError: + return {"status": "error", "message": "min(x) не является float"} + try: + max_x = float(self.max.get()) + except ValueError: + return {"status": "error", "message": "max(x) не является float"} + try: + a = float(v[0][1].get()) + except ValueError: + return {"status": "error", "message": "a не является float"} + try: + b = float(v[1][1].get()) + except ValueError: + return {"status": "error", "message": "b не является float"} + if cur_type == PresetType.PARABOLA: + try: + c = float(v[2][1].get()) + except ValueError: + return {"status": "error", "message": "c не является float"} return { "status": "ok", "graph": "preset", "type": "parabola", - "min": self.min.get(), - "max": self.max.get(), - "a": v[0][1].get(), - "b": v[1][1].get(), - "c": v[2][1].get() + "min": min_x, + "max": max_x, + "a": a, + "b": b, + "c": c } elif cur_type == PresetType.LINE: return { "status": "ok", "graph": "preset", "type": "line", - "min": self.min.get(), - "max": self.max.get(), - "a": v[0][1].get(), - "b": v[1][1].get() + "min": min_x, + "max": max_x, + "a": a, + "b": b } @@ -202,15 +222,19 @@ class PointPlotFrame(tk.Frame): grid_conf(self, gr, gc) def collect_info(self): - # TODO: Добавить обработку ошибок (нет файла, нельзя прочитать, - # неправильный формат данных и т.д) - with open(self._path) as f: - data = f.read().strip().split() - - points = [] - for line in data: - x, y = map(int, line.split(',')) - points.append((x, y)) + try: + with open(self._path) as f: + data = f.read().strip().split() + except FileNotFoundError: + return {"status": "error", "message": "Файл не найден"} + + try: + points = [] + for line in data: + x, y = map(float, line.split(',')) + points.append((x, y)) + except ValueError: + return {"status": "error", "message": "Неверный формат данных"} return {"status": "ok", "graph": "point", "points": points} @@ -269,6 +293,9 @@ class App(tk.Frame): self.submit_btn["command"] = self.submit self.submit_btn.grid(row=5, column=0, rowspan=1, columnspan=2, padx=10, pady=10, sticky=tk.NSEW) + self.error_label = tk.Label(self) + self.error_label["fg"] = "#ff0000" + def change_plot_type(self): cur_type = self.plot_type.get() for ptype, widget in self.pw.items(): @@ -280,7 +307,13 @@ class App(tk.Frame): def submit(self): cur_type = self.plot_type.get() widget = self.pw[cur_type] - print(widget.collect_info()) + info = widget.collect_info() + if info["status"] == "error": + self.error_label["text"] = info["message"] + self.error_label.grid(row=7, column=0, rowspan=1, columnspan=2, padx=10, pady=5, sticky=tk.NSEW) + else: + self.error_label.grid_forget() + print(info) def grid_conf(obj, rows, cols, uniform=False): -- cgit v1.2.3