class ApplicationWindow(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.setWindowTitle("Application Main Window") self.file_menu = QtGui.QMenu('&File', self) self.file_menu.addAction('&Quit', self.fileQuit, QtCore.Qt.CTRL + QtCore.Qt.Key_Q) self.menuBar().addMenu(self.file_menu) self.main_widget = QtGui.QWidget(self) self.grid = QtGui.QGridLayout(self.main_widget) #setting layout type self.grid.setColumnMinimumWidth(4,200) self.grid.setSpacing(10) self.graph = Plotter(self.main_widget) self.input_box = QtGui.QLineEdit("plot y=exp(-(x)**2) from -4 to 4") self.text_box = QtGui.QTextEdit("Code Snippets Here.") self.slider_display = QtGui.QLineEdit("") self.button_plot = QtGui.QPushButton('Plot') self.button_plot.clicked.connect(self.plot_init) self.button_save = QtGui.QPushButton('Save') self.button_save.clicked.connect(self.save) # dc = MyDynamicMplCanvas(self.main_widget, width=5, height=4, dpi=100) self.grid.addWidget(self.graph,1,0,1,3) self.grid.addWidget(self.button_plot,0,1) self.grid.addWidget(self.button_save,0,2) self.grid.addWidget(self.input_box,0,0) self.grid.addWidget(self.text_box,1,4,1,2) # self.grid.addWidget(self.slider1,0,2,1,1) # self.grid.addWidget(self.slider_display,0,3,1,1) # l.addWidget(dc) # self.main_widget.setFocus() self.setCentralWidget(self.main_widget) def fileQuit(self): self.close() def save(self): print("Save") self.plot_init() self.graph.save() def plot_init(self): """ This function initializes the plot. If sliders need to be created, it happens here. """ text = str(self.input_box.text()) self.val_range, self.fn, self.mod_list,self.method = interpreter(text) if len(self.mod_list) != 0: start = [1 for i in self.mod_list] self.grid.setColumnMinimumWidth(2,100) self.group_box = QtGui.QGroupBox("Modifiers") self.vbox = QtGui.QVBoxLayout() self.sliders = [] for i in xrange(len(self.mod_list)): slider1 = QtGui.QSlider(QtCore.Qt.Horizontal, self) slider1.setRange(1,10) slider1.valueChanged.connect(self.plot_w_slider) self.sliders.append(slider1) self.vbox.addWidget(slider1) self.vbox.addStretch(1) self.group_box.setLayout(self.vbox) self.grid.addWidget(self.group_box, 1,3,1,1) if isinstance(self.method,str): x, y = evaluater(self.val_range,self.fn,self.mod_list,start) elif isinstance(self.method,dict): x, y = diffeqsolver(self.val_range,self.fn,self.method['solve'],self.mod_list,start) if y == "Error": self.text_box.append("Error") self.graph.make_graph(x,y) self.graph.draw() code = gen_code(self.val_range, self.fn, self.mod_list,values) self.text_box.append(code) self.code = code elif len(self.mod_list) == 0: self.grid.setColumnMinimumWidth(2,10) if isinstance(self.method,str): x, y = evaluater(self.val_range,self.fn) elif isinstance(self.method,dict): x, y = diffeqsolver(self.val_range,self.fn,self.method['solve']) if y == "Error": self.text_box.append("Error") self.graph.make_graph(x,y) self.graph.draw() code = gen_code(self.val_range,self.fn) self.text_box.append(code) self.code = code self.save_code_button = QtGui.QPushButton('Save Code') self.save_code_button.clicked.connect(self.save_code) self.grid.addWidget(self.save_code_button,0,4,1,2) def save_code(self): with open("example.py",'w') as writer: writer.write(self.code) self.text_box.append("\nCode saved successfully!\n") # @QtCore.pyqtSlot(int) def plot_w_slider(self): values = [slider.value() for slider in self.sliders] # print(values) x, y = evaluater(self.val_range,self.fn,self.mod_list,values) if y == "Error": self.text_box.append("Error") self.graph.make_graph(x,y) self.graph.draw() code = gen_code(self.val_range, self.fn, self.mod_list,values) self.text_box.append(code) self.code = code @QtCore.pyqtSlot(int) def get_text_plot(self,*args): try: a = float(args[0]) print(a) except IndexError: a = 1.0 text = str(self.input_box.text()) x, y = interpreter(text) self.graph.make_graph(x,y,a) self.graph.draw() def closeEvent(self, ce): self.fileQuit()