summaryrefslogtreecommitdiff
path: root/python-graphics/main.py
diff options
context:
space:
mode:
authorAndrew Guschin <saintruler@gmail.com>2021-04-05 19:19:14 +0400
committerAndrew Guschin <saintruler@gmail.com>2021-04-05 19:19:14 +0400
commit399b82de92f508b8d96ea0c55d240ee09e0310b3 (patch)
tree559cdf4697f0f4ada7d3a7e91a4ff243f18d0b13 /python-graphics/main.py
parent02bd09ba0d738fab3c502473489d74c0ea32bc49 (diff)
Добавил обработку ошибок
Diffstat (limited to 'python-graphics/main.py')
-rw-r--r--python-graphics/main.py79
1 files changed, 56 insertions, 23 deletions
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):