summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Guschin <saintruler@gmail.com>2021-04-05 17:39:32 +0400
committerAndrew Guschin <saintruler@gmail.com>2021-04-05 17:39:32 +0400
commiteffc0350e37f0cbb012f0740e02838b0bbdc4a94 (patch)
tree68d7d807411af8e6ffd1fb5ff6ef0595a41fe1b9
parentcc45ab13adf5f06ae3fc7c2334b63ef8f8c79a23 (diff)
Сделал виджет предустановленных графиков
-rw-r--r--python-graphics/main.py128
1 files changed, 103 insertions, 25 deletions
diff --git a/python-graphics/main.py b/python-graphics/main.py
index 300a10a..cd7932e 100644
--- a/python-graphics/main.py
+++ b/python-graphics/main.py
@@ -9,11 +9,13 @@ class PlotType:
POINT = 3
-class PresetPlot:
- LINE = 0
- PARABOLA = 1
+class PresetType:
+ LINE = "ax + b = 0"
+ PARABOLA = "ax^2 + bx + c = 0"
- OPTIONS = ["ax + b = 0", "ax^2 + bx + c = 0"]
+ @classmethod
+ def options(cls):
+ return [cls.LINE, cls.PARABOLA]
class PlotTypeFrame(tk.Frame):
@@ -59,21 +61,65 @@ class PlotTypeFrame(tk.Frame):
class PresetPlotFrame(tk.Frame):
- def __init__(self, master, preset_type):
+ def __init__(self, master):
super().__init__(master)
self.master = master
- self.preset_type = preset_type
self.create_widgets()
def create_widgets(self):
+ self.preset_type = tk.StringVar()
self.options = ttk.OptionMenu(
self,
self.preset_type,
- PresetPlot.OPTIONS[0],
- *PresetPlot.OPTIONS
+ PresetType.options()[0],
+ *PresetType.options(),
)
- self.options.grid(row=0, column=0, columnspan=1, rowspan=1, sticky=tk.NSEW)
+
+ self.variables = {}
+
+ la = tk.Label(self)
+ la["text"] = "a: "
+ a = tk.Entry(self)
+
+ lb = tk.Label(self)
+ lb["text"] = "b: "
+ b = tk.Entry(self)
+
+ lc = tk.Label(self)
+ lc["text"] = "c: "
+ c = tk.Entry(self)
+
+ self.variables[PresetType.LINE] = [(la, a), (lb, b)]
+ self.variables[PresetType.PARABOLA] = [(la, a), (lb, b), (lc, c)]
+ self.variables[None] = [(la, a), (lb, b), (lc, c)]
+
+ self.options.grid(row=0, column=0, columnspan=2, rowspan=1, sticky=tk.NSEW)
+
+ self.preset_type.trace("w", self.type_changed)
+
+ def type_changed(self, *args):
+ new_type = self.preset_type.get()
+ if new_type == PresetType.LINE:
+ print("line")
+ elif new_type == PresetType.PARABOLA:
+ print("parabola")
+
+ for (label, var) in self.variables[None]:
+ label.grid_forget()
+ var.grid_forget()
+
+ for i, (label, var) in enumerate(self.variables[new_type], 1):
+ label.grid(row=i, column=0)
+ var.grid(row=i, column=1)
+
+ def grid_size(self):
+ return (4, 2)
+
+ def show(self):
+ self.grid(row=0, column=0, columnspan=2, rowspan=4, sticky=tk.NSEW)
+ self.grid_columnconfigure(0, weight=1)
+ self.grid_columnconfigure(1, weight=4)
class UserPlotFrame(tk.Frame):
@@ -86,46 +132,58 @@ class UserPlotFrame(tk.Frame):
def create_widgets(self):
pass
+ def grid_size(self):
+ return (2, 1)
+
+ def show(self):
+ self.grid(row=0, column=0, columnspan=1, rowspan=2, sticky=tk.NSEW)
+ self.grid_columnconfigure(0, weight=1)
+
+ self.grid_rowconfigure(0, weight=1)
+ self.grid_rowconfigure(1, weight=1)
+
class PointPlotFrame(tk.Frame):
def __init__(self, master):
super().__init__(master)
self.master = master
-
+
+ self.show()
self.create_widgets()
def create_widgets(self):
self.choose_file = tk.Button(self)
self.choose_file["text"] = "Выбрать файл"
self.choose_file["command"] = self.open_file
- self.choose_file.grid(row=0, column=0, sticky=tk.NSEW)
+ self.choose_file.grid(row=0, column=0, columnspan=1, rowspan=1, padx=3, pady=3, sticky=tk.NSEW)
self.filepath = tk.Entry(self)
- self.filepath.grid(row=1, column=0)
+ self.filepath.grid(row=1, column=0, sticky=tk.NSEW)
def open_file(self):
a = tk.filedialog.askopenfile()
- # self.filepath.set(a.name)
- # print(self.filepath.get())
self.filepath.delete(0, tk.END)
self.filepath.insert(0, a.name)
print(a)
+ def grid_size(self):
+ return (2, 1)
+
+ def show(self):
+ gr, gc = self.grid_size()
+ self.grid(row=0, column=0, columnspan=gc, rowspan=gr, sticky=tk.NSEW)
+ grid_conf(self, gr, gc)
+
class App(tk.Frame):
def __init__(self, master):
super().__init__(master)
- # self.geometry("400x250")
- self.grid(row=0, column=0, columnspan=2, rowspan=4)
- self.grid_columnconfigure(0, weight=1, uniform="foo")
- self.grid_columnconfigure(1, weight=1, uniform="foo")
+ self.grid(row=0, column=0, columnspan=2, rowspan=4, sticky=tk.NSEW)
self.create_widgets()
def create_widgets(self):
# Создаём фреймы с настройкой выбранного типа графика
- self.preset_type = tk.IntVar()
-
self.cfg_pt = {
"row": 0, "column": 1,
"rowspan": 3, "columnspan": 1,
@@ -136,12 +194,12 @@ class App(tk.Frame):
self.right_frame = ttk.LabelFrame(self)
self.right_frame["text"] = "Настройка графика"
self.right_frame.grid(**self.cfg_pt)
+ grid_conf(self.right_frame, 3, 1)
- self.preset_plot_frame = PresetPlotFrame(self.right_frame, self.preset_type)
+ self.preset_plot_frame = PresetPlotFrame(self.right_frame)
self.user_plot_frame = UserPlotFrame(self.right_frame)
self.point_plot_frame = PointPlotFrame(self.right_frame)
- # self.preset_plot_frame.pack(side=tk.RIGHT)
self.pw = {
PlotType.PRESET: self.preset_plot_frame,
PlotType.USER: self.user_plot_frame,
@@ -168,20 +226,40 @@ class App(tk.Frame):
self.submit_btn = tk.Button(self)
self.submit_btn["text"] = "Построить график"
- # self.submit_btn.grid(row=3, column=0, columnspan=2, padx=10, pady=10, sticky=tk.W)
- self.submit_btn.grid(row=3, column=0, columnspan=2, padx=10, pady=10, sticky=tk.NSEW)
+ self.submit_btn.grid(row=3, column=0, rowspan=1, columnspan=2, padx=10, pady=10, sticky=tk.NSEW)
def change_plot_type(self):
cur_type = self.plot_type.get()
for ptype, widget in self.pw.items():
if cur_type == ptype:
- widget.grid(column=0, row=0, padx=10, pady=10)
+ widget.show()
+ # gr, gc = widget.grid_size()
+
+ # self.right_frame.grid_forget()
+ # self.right_frame.grid(
+ # row=0, column=1,
+ # rowspan=gr, columnspan=gc,
+ # padx=10, pady=10,
+ # sticky=tk.NSEW
+ # )
+ # grid_conf(self.right_frame, gr, gc)
else:
widget.grid_forget()
+def grid_conf(obj, rows, cols, uniform=False):
+ for i in range(rows):
+ obj.grid_rowconfigure(i, weight=1, uniform=uniform)
+ # tk.Grid.rowconfigure(obj, i, weight=1, uniform=uniform)
+ for i in range(cols):
+ obj.grid_columnconfigure(i, weight=1, uniform=uniform)
+ # tk.Grid.columnconfigure(obj, i, weight=1, uniform=uniform)
+
+
if __name__ == "__main__":
root = tk.Tk()
app = App(root)
+ grid_conf(app, 4, 2)
+ grid_conf(root, 4, 2)
root.mainloop()