def __init__(self, parent=None): QMainWindow.__init__(self, parent) self.central = QWidget(self) self.textbox = QTextEdit(self.central) self.textbox.setMinimumSize(300, 100) self.vlayout = QVBoxLayout() # Window layout self.displays = QHBoxLayout() self.disp = ImageWidget(self) self.displays.addWidget(self.disp) self.vlayout.addLayout(self.displays) self.label = QLabel(self) self.vlayout.addWidget(self.label) self.vlayout.addWidget(self.textbox) self.central.setLayout(self.vlayout) self.setCentralWidget(self.central) self.mainMenu = self.menuBar() # Menu bar exitAction = QAction('&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.triggered.connect(self.close) self.fileMenu = self.mainMenu.addMenu('&File') self.fileMenu.addAction(exitAction) im = cv.imread('C:\\Users\\Shir0w\\Desktop\\Figure_1.png') scale = 2 disp_size = im.shape[1]//scale, im.shape[0]//scale disp_bpl = disp_size[0] * 3 if scale > 1: im = cv.resize(im, disp_size, interpolation=cv.INTER_CUBIC) qim = QImage(im.data, disp_size[0], disp_size[1],QImage.Format_RGB888) self.disp.setImage(qim)
def __init__(self): super(Tab_ECA,self).__init__() #Load UI From ui file loadUi(f'{UIS_FOLDER}/tab_eca.ui',self) #Load Ui From QT #Insert image widget self.image_widget = ImageWidget() self.verticalLayout_2.insertWidget(0,self.image_widget) self.eca = None
def __init__(self): # Instantiate Widget and UI super(Tab_Sorter, self).__init__() loadUi(f'{UIS_FOLDER}/tab_sorter.ui', self) # Instantiate Image wrapper and Algo Sorter self.im_builder = ImageBuilder() self.sorter = None self.image_widget = ImageWidget() self.verticalLayout_2.insertWidget(0, self.image_widget) # Populate ListView with: # Avaiable sorting algorithm # Avaiable unsorted list self.populate()
def __init__(self): super(Tab_Quadratic, self).__init__() #Load UI From ui file loadUi(f'{UIS_FOLDER}/tab_quadratic.ui', self) #Load Ui From QT self.CPT = 0 # self.im_builder = ImageBuilder() #Insert image widget self.image_widget = ImageWidget() self.verticalLayout_2.insertWidget(0, self.image_widget) self.quadra = None self.c_thread = None self.lbl_fps.setText(f"Average FPS : ")
def __init__(self): super(Tab_Pathfinder,self).__init__() #Load UI From ui file loadUi(f'{UIS_FOLDER}/tab_pathfinder.ui',self) #Load Ui From QT #Insert image widget self.image_widget = ImageWidget() self.verticalLayout_2.insertWidget(0,self.image_widget) #Pathfinder class self.pathfinder = None #List avaiable algo and data self.populate_algo_list() self.populate_data_list() #Set stepts slider to 0 self.sld_steps.setMinimum(0)
class Tab_ECA(QWidget): def __init__(self): super(Tab_ECA,self).__init__() #Load UI From ui file loadUi(f'{UIS_FOLDER}/tab_eca.ui',self) #Load Ui From QT #Insert image widget self.image_widget = ImageWidget() self.verticalLayout_2.insertWidget(0,self.image_widget) self.eca = None def anim_listener(self,stop_event): for k in range(self.eca.n_steps): self.eca.step(k) self.update_visual(k) time.sleep(.01) self.stop_event.set() sys.exit() def slt_start(self): self.current_step = 0 rule_id = int(self.txt_rule.toPlainText()) is_random = self.cb_random.isChecked() self.eca = ECA(901,450,rule_id,is_random) self.image = np.zeros((self.eca.n_steps,self.eca.w,3),dtype=np.uint8) self.stop_event = threading.Event() self.c_thread = threading.Thread(target=self.anim_listener,args=(self.stop_event,)) self.c_thread.start() def update_visual(self,step): img = ImageBuilder.build(b_type='eca',data=self.eca.states,step=step, im=self.image ) self.image_widget.setImage(display_image(img))
class Tab_Pathfinder(QWidget): def __init__(self): super(Tab_Pathfinder,self).__init__() #Load UI From ui file loadUi(f'{UIS_FOLDER}/tab_pathfinder.ui',self) #Load Ui From QT #Insert image widget self.image_widget = ImageWidget() self.verticalLayout_2.insertWidget(0,self.image_widget) #Pathfinder class self.pathfinder = None #List avaiable algo and data self.populate_algo_list() self.populate_data_list() #Set stepts slider to 0 self.sld_steps.setMinimum(0) def get_implemented_algorithm(self): return [cls.__name__ for cls in Pathfinder.__subclasses__()] def populate_algo_list(self): for algorithm in self.get_implemented_algorithm(): self.lst_func.addItem(algorithm) def populate_data_list(self): for file in glob(f"{DATA_FOLDER}/Pathfinder/*.txt"): f_name = file.split('\\')[-1] self.lst_data.addItem(f_name) def get_data_from_file(self): try: f_name = self.lst_data.currentItem().text() except AttributeError: return None txt = open(f"{DATA_FOLDER}/Pathfinder/{f_name}",'r').read() return [[col for col in row] for row in txt.split('\n')] def slt_sld_steps(self,val): self.current_step = val self.update_visual() def slt_btn_run(self): self.current_step = 0 item = self.lst_func.currentItem().text() data = self.get_data_from_file() if data == None: return ##FILL if item == "Dijkstra": self.pathfinder = Dijkstra() elif item == "AStar": self.pathfinder = AStar() self.pathfinder.solve(data) self.total_steps = len(self.pathfinder.steps)-1 self.sld_steps.setMaximum(self.total_steps) self.sld_steps.setValue(self.current_step) self.update_visual() def update_visual(self): if self.current_step == 0: text = "Initial Step" elif self.current_step == self.total_steps: text = "Final Step" else: text = f"Step {self.current_step} / {self.total_steps}" img = ImageBuilder.build(b_type='pathfinder',data=self.pathfinder.steps[self.current_step] ) self.image_widget.setImage(display_image(img)) self.lbl_step.setText(text)
class Tab_Sorter(QWidget): """ Class managing the Sorter Tab in our application """ def __init__(self): # Instantiate Widget and UI super(Tab_Sorter, self).__init__() loadUi(f'{UIS_FOLDER}/tab_sorter.ui', self) # Instantiate Image wrapper and Algo Sorter self.im_builder = ImageBuilder() self.sorter = None self.image_widget = ImageWidget() self.verticalLayout_2.insertWidget(0, self.image_widget) # Populate ListView with: # Avaiable sorting algorithm # Avaiable unsorted list self.populate() def get_implemented_algorithm(self): return [cls.__name__ for cls in Sorter.__subclasses__()] def populate(self): self.populate_algo_list() self.populate_data_list() def populate_algo_list(self): for algorithm in self.get_implemented_algorithm(): self.lst_func.addItem(algorithm) def populate_data_list(self): for file in glob(f"{DATA_FOLDER}/Sorter/*.txt"): f_name = file.split('\\')[-1] self.lst_data.addItem(f_name) def get_data_from_file(self): try: f_name = self.lst_data.currentItem().text() except AttributeError: return None txt = open(f"{DATA_FOLDER}/Sorter/{f_name}", 'r').read() return [int(i) for i in txt.split(',')] def slt_sld_step(self, val): """ Update our visual on slider changes """ self.current_step = val self.update_visual() def slt_sort_run(self): """ Run algorithm using selected item in ListViews """ item = self.lst_func.currentItem().text() data = self.get_data_from_file() print(f"Sorting {len(data)} items") if data == None: return if item == "Insertion": self.sorter = Insertion() elif item == "Selection": self.sorter = Selection() elif item == "Quicksort": self.sorter = Quicksort() elif item == "Bubblesort": self.sorter = Bubblesort() elif item == "Bubblesort_Optimized": self.sorter = Bubblesort_Optimized() elif item == "Bubblesort_Optimized_2": self.sorter = Bubblesort_Optimized_2() elif item == "Combsort": self.sorter = Combsort() elif item == "Gnomesort": self.sorter = Gnomesort() self.sorter.sort(dc(data)) self.total_steps = len(self.sorter.steps) - 1 self.sld_steps.setMaximum(self.total_steps) self.current_step = 0 self.sld_steps.setValue(0) self.update_visual() def update_visual(self): if self.current_step == 0: text = "Initial Step" elif self.current_step == self.total_steps: text = "Final Step" else: text = f"Step {self.current_step} / {self.total_steps}" img = ImageBuilder.build( b_type='sorter', data=self.sorter.steps[self.current_step], status=self.sorter.steps_status[self.current_step]) self.image_widget.setImage(display_image(img)) self.lbl_step.setText(text)
class Tab_Quadratic(QWidget): def __init__(self): super(Tab_Quadratic, self).__init__() #Load UI From ui file loadUi(f'{UIS_FOLDER}/tab_quadratic.ui', self) #Load Ui From QT self.CPT = 0 # self.im_builder = ImageBuilder() #Insert image widget self.image_widget = ImageWidget() self.verticalLayout_2.insertWidget(0, self.image_widget) self.quadra = None self.c_thread = None self.lbl_fps.setText(f"Average FPS : ") def anim_listener(self, stop_event): state = True while state and not stop_event.isSet(): start = time.time() #Check if we need to recompute the quad structure on each loop #Since our particles are moving if self.quadra.show_quad: self.quadra.create_qtree() #Check Collision if self.quadra.collision_loop: self.quadra.normal_collision_check() else: self.quadra.qtree = self.quadra.check_collision( self.quadra.qtree) #Draw self.update_visual() #Update self.quadra.qtree = self.quadra.update_qtree(self.quadra.qtree) end = time.time() self.lbl_fps.setText(f"Average FPS : {1/(end-start):.5f}") time.sleep(.01) # Avoid crashing if too few points sys.exit() def slt_start(self): # print(dir(self.c_thread)) nb_points = int(self.txt_points.toPlainText()) pt_limit = int(self.txt_limit.toPlainText()) points = [ Pt(random.randint(0, Quadratic.WIN_W), random.randint(0, Quadratic.WIN_H), 3) for _ in range(nb_points) ] self.quadra = Quadratic(nb_points, pt_limit) self.quadra.update_points(points) self.quadra.create_qtree() self.stop_event = threading.Event() self.c_thread = threading.Thread(target=self.anim_listener, args=(self.stop_event, )) self.c_thread.start() def slt_stop(self): self.stop_event.set() self.c_thread.join() self.clear_visual() def slt_quads_changed(self, value): self.quadra.show_quad = False if value != 0: self.quadra.show_quad = True def slt_collision_changed(self, value): self.quadra.collision_loop = False if value != 0: self.quadra.collision_loop = True def clear_visual(self): self.image_widget.clear() def update_visual(self): img = ImageBuilder.build(b_type='qtree', data=self.quadra.qtree, im=None, quads=self.quadra.show_quad, resize=True) self.image_widget.setImage(display_image(img))