def set_eq_to_obj(self, eq_w, a_w, b_w, d_w, top): eq = eq_w.get_value() a = a_w.get_value() b = b_w.get_value() d = d_w.get_value() top.grab_release() top.destroy() if eq: self.solving_obj = IntegralNumerical(equation=eq, a=a, b=b, delta=d) self.show_result()
def next(self): rad1 = self.rad1.get_value() rad2 = self.rad2.get_value() if rad1 == 'mid point' and rad2 == 'file': tkMessageBox.showerror('file data error', message="for this method you can't use data from file. you can chose equation.", ) else: if rad2 == 'file': path = askopenfilename() self.solving_obj = IntegralNumerical(path=path) self.show_result() else: self.show_eq_fram()
class CalculateSetting(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.rad1 = RadioFieldVertical(self, "solving methodes", ['left hand', 'right hand', 'mid point', 'trapezoidal', 'simpson'], 'simpson') self.rad1.pack(side=LEFT, anchor=W, fill=Y, pady=10, padx=5) self.rad2 = RadioFieldVertical(self, "data from", ['file', 'equation'], 'equation') self.rad2.pack(side=TOP, anchor=W, pady=10, padx=5) self.but = ButtonList(self, [('next', lambda:self.next()), ('close', lambda:self.close(),)]) self.but.pack(side=BOTTOM, anchor=S, fill=X, expand=True, padx=5, pady=5) self.result_row = Frame(self).pack(side=BOTTOM, fill=X) solving_obj = None result_label = None def next(self): rad1 = self.rad1.get_value() rad2 = self.rad2.get_value() if rad1 == 'mid point' and rad2 == 'file': tkMessageBox.showerror('file data error', message="for this method you can't use data from file. you can chose equation.", ) else: if rad2 == 'file': path = askopenfilename() self.solving_obj = IntegralNumerical(path=path) self.show_result() else: self.show_eq_fram() def show_eq_fram(self): top = Toplevel() eq = EntryField(top, 'equation') eq.pack(side=TOP, fill=X, pady=5, padx=5) a = EntryField(top, 'a') a.pack(side=TOP, fill=X, pady=5, padx=5) b = EntryField(top, 'b') b.pack(side=TOP, fill=X, pady=5, padx=5) delta = EntryField(top, 'delta') delta.pack(side=TOP, fill=X, pady=5, padx=5) Button(top, text='ok', command=lambda:self.set_eq_to_obj(eq, a, b, delta, top)).pack(side=BOTTOM, fill=X, padx=30, pady=5) # top.mainloop() top.grab_set() def set_eq_to_obj(self, eq_w, a_w, b_w, d_w, top): eq = eq_w.get_value() a = a_w.get_value() b = b_w.get_value() d = d_w.get_value() top.grab_release() top.destroy() if eq: self.solving_obj = IntegralNumerical(equation=eq, a=a, b=b, delta=d) self.show_result() def get_result(self): method = self.rad1.get_value() result = 0 if method == 'left hand': result = self.solving_obj.left_hand() elif method == 'right hand': result = self.solving_obj.right_hand() elif method == 'mid point': result = self.solving_obj.mid_point() elif method == 'trapezoidal': result = self.solving_obj.trapezoidal() elif method == 'simpson': result = self.solving_obj.simpson() return result def show_result(self): result = self.get_result() if self.result_label is None: self.result_label = Label(self.result_row, text=str(result), fg='blue') Label(self.result_row, text="result :").pack(side=LEFT, anchor=E, pady=10) self.result_label.pack(side=RIGHT, anchor=W, expand=TRUE, pady=10) else: self.result_label.configure(text=str(result)) @staticmethod def close(): root.destroy()