def __init__(self): super(MainWindow, self).__init__() #Se llama a la ventana self.administrador = Administrador() self.grafo = dict() self.ui = Ui_MainWindow() self.ui.setupUi(self) #Conexión del Slot self.ui.agregarFinal_pushButton.clicked.connect(self.click_agregar) self.ui.agregarInicio_pushButton.clicked.connect(self.click_agregarInicio) self.ui.mostrar_pushButton.clicked.connect(self.click_mostrar) self.ui.actionAbrir.triggered.connect(self.action_abrir_archivo) self.ui.actionGuardar.triggered.connect(self.action_guardar_archivo) self.ui.actionGrafo.triggered.connect(self.to_graph) self.ui.actionRecorrido.triggered.connect(self.action_recorrido) self.ui.mostrar_tabla_pushButton.clicked.connect(self.mostrar_tabla) self.ui.buscar_pushButton.clicked.connect(self.buscar_id) self.ui.dibujar.clicked.connect(self.dibujar) self.ui.limpiar.clicked.connect(self.limpiar) self.scene = QGraphicsScene() self.ui.graphicsView.setScene(self.scene) self.ui.ordenar_id_pushButton.clicked.connect(self.order_id) self.ui.ordenar_distancia_pushButton.clicked.connect(self.order_distancia) self.ui.ordenar_velocidad_pushButton.clicked.connect(self.order_velocidad)
class MainWindow(QMainWindow): #llamar al constructor def __init__(self): #funcion super(MainWindow, self).__init__() #metodo #self se usa para que nuestro objeto exista globalmente y no solo en el constructor. self.administrador = Administrador() self.ui = Ui_MainWindow() #objeto referenciado self.ui.setupUi(self) #metodo para enbeber la instruccion self.ui.agregar_final_pushButton.clicked.connect(self.click_agregar) #conectar las instrucciones de abajo self.ui.agregar_inicio_pushButton.clicked.connect(self.click_agregar_inicio) self.ui.mostrar_pushButton.clicked.connect(self.click_mostrar) @Slot() def click_mostrar(self): self.ui.salida.clear() #limpiar pantalla de PlaintText self.ui.salida.insertPlainText(str(self.administrador)) #salida datos introducidos por pantalla @Slot() #funcion Slot para recibir eventos def click_agregar(self): #funcion de botones #obtener infornacion para las variables #.tex() estrae el texto ingresado #self. esta asociado a las variables globales de el programa identificador = self.ui.identificador_lineEdit.text() origenx = self.ui.origen_x_spinBox.value() origeny = self.ui.origen_y_spinBox.value() destinox = self.ui.destino_x_spinBox.value() destinoy = self.ui.destino_y_spinBox.value() velocidad = self.ui.velocidad_lineEdit.text() red = self.ui.red_spinBox.value() green = self.ui.green_spinBox.value() blue = self.ui.blue_spinBox.value() #.value() regresa un valor entero # elementos del libro particula = Particula(identificador, origenx, origeny, destinox, destinoy, velocidad, red, green, blue) #asociar el apartado globalmente self.administrador.agregar_final(particula) # print(titulo, autor, publicado, editorial) # mostrar los datos en el recuadro PlainText # self.ui.salida.insertPlainText(titulo + autor + str(publicado) + editorial) @Slot() #funcion Slot para recibir eventos def click_agregar_inicio(self): #funcion de botones #obtener infornacion para las variables #.tex() estrae el texto ingresado #self. esta asociado a las variables globales de el programa identificador = self.ui.identificador_lineEdit.text() origenx = self.ui.origen_x_spinBox.value() origeny = self.ui.origen_y_spinBox.value() destinox = self.ui.destino_x_spinBox.value() destinoy = self.ui.destino_y_spinBox.value() velocidad = self.ui.velocidad_lineEdit.text() red = self.ui.red_spinBox.value() green = self.ui.green_spinBox.value() blue = self.ui.blue_spinBox.value() #.value() regresa un valor entero particula = Particula(identificador, origenx, origeny, destinox, destinoy, velocidad, red, green, blue) self.administrador.agregar_inicio(particula)
def __init__(self): #funcion super(MainWindow, self).__init__() #metodo #self se usa para que nuestro objeto exista globalmente y no solo en el constructor. self.administrador = Administrador() self.ui = Ui_MainWindow() #objeto referenciado self.ui.setupUi(self) #metodo para enbeber la instruccion self.ui.agregar_final_pushButton.clicked.connect(self.click_agregar) #conectar las instrucciones de abajo self.ui.agregar_inicio_pushButton.clicked.connect(self.click_agregar_inicio) self.ui.mostrar_pushButton.clicked.connect(self.click_mostrar)
def crear_componente(componente): if componente == "Rutinas": return Rutinas() elif componente == "Ejercicios": return Ejercicios() elif componente == "Administrador": return Administrador() elif componente == "Usuario": return Usuarios() assert 0, "imposible la creacion del componente!" + componente
def __init__(self): # super ==> metodo super(MainWindow, self).__init__() # self se usa para que nuestro objeto exista globalmente y no solo en el constructor. self.administrador = Administrador() # Ui_MainWindow() ==> objeto referenciado self.ui = Ui_MainWindow() # setupUi ==> metodo para enbeber la instruccion self.ui.setupUi(self) # conectar las instrucciones de "conectar_final", # "conectar_inicio" y "mostrar" self.ui.agregar_final_pushButton.clicked.connect(self.click_agregar) self.ui.agregar_inicio_pushButton.clicked.connect(self.click_agregar_inicio) self.ui.mostrar_pushButton.clicked.connect(self.click_mostrar) # conectar las acciones self.ui.actionAbrir.triggered.connect(self.action_abrir_archivo) self.ui.actionGuardar.triggered.connect(self.action_guardar_archivo) # Botones para mostrar la tabla y buscar self.ui.mostrar_tabla_pushButton.clicked.connect(self.mostrar_tabla) self.ui.buscar_pushButton.clicked.connect(self.buscar_identificador)
class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() #Se llama a la ventana self.administrador = Administrador() self.grafo = dict() self.ui = Ui_MainWindow() self.ui.setupUi(self) #Conexión del Slot self.ui.agregarFinal_pushButton.clicked.connect(self.click_agregar) self.ui.agregarInicio_pushButton.clicked.connect(self.click_agregarInicio) self.ui.mostrar_pushButton.clicked.connect(self.click_mostrar) self.ui.actionAbrir.triggered.connect(self.action_abrir_archivo) self.ui.actionGuardar.triggered.connect(self.action_guardar_archivo) self.ui.actionGrafo.triggered.connect(self.to_graph) self.ui.actionRecorrido.triggered.connect(self.action_recorrido) self.ui.mostrar_tabla_pushButton.clicked.connect(self.mostrar_tabla) self.ui.buscar_pushButton.clicked.connect(self.buscar_id) self.ui.dibujar.clicked.connect(self.dibujar) self.ui.limpiar.clicked.connect(self.limpiar) self.scene = QGraphicsScene() self.ui.graphicsView.setScene(self.scene) self.ui.ordenar_id_pushButton.clicked.connect(self.order_id) self.ui.ordenar_distancia_pushButton.clicked.connect(self.order_distancia) self.ui.ordenar_velocidad_pushButton.clicked.connect(self.order_velocidad) def order_id(self): self.administrador.order_by_id() def order_distancia(self): self.administrador.order_by_distancia() def order_velocidad(self): self.administrador.order_by_velocidad() def wheelEvent(self, event): print(event.delta()) if event.delta() > 0: self.ui.graphicsView.scale(1.2, 1.2) else: self.ui.graphicsView.scale(0.8, 0.8) @Slot() def action_recorrido(self): #Amplitud cola = [] visitados = [] recorrido = [] self.to_graph() x = self.ui.origenX_spinBox.value() y = self.ui.origenY_spinBox.value() cola.append((x,y)) visitados.append((x,y)) while cola: padre = cola[-1] #En esta parte, se saca el tope de la lista recorrido.append(padre) del cola[-1] adyacentes = self.grafo[padre] #Aquí se sacan los adyacentes for a in adyacentes: if a[0] not in visitados: visitados.append(a[0]) cola.append(a[0]) else: break print(visitados) self.ui.salida.insertPlainText("\nAmplitud\n") self.ui.salida.insertPlainText(str(recorrido)) #Profundidad pila = [] visitados = [] recorrido = [] x = self.ui.origenX_spinBox.value() y = self.ui.origenY_spinBox.value() pila.append((x,y)) visitados.append((x,y)) while pila: padre = pila[0] #Sacamos el tope de la lista recorrido.append(padre) del pila[0] adyacentes = self.grafo[padre] #Sacamos los adyacentes for a in adyacentes: if a[0] not in visitados: visitados.append(a[0]) pila.append(a[0]) else: break print(visitados) self.ui.salida.insertPlainText("\n\nProfundidad\n") self.ui.salida.insertPlainText(str(visitados)) @Slot() def to_graph(self): self.ui.salida.clear() for particula in self.administrador: origen = (particula.origen_x, particula.origen_y) destino = (particula.destino_x, particula.destino_y) distancia = (particula.distancia) arista_origen = (origen, distancia) arista_destino = (destino, distancia) if origen in self.grafo: self.grafo[origen].append(arista_destino) else: self.grafo[origen] = [arista_destino] if destino in self.grafo: self.grafo[destino].append(arista_origen) else: self.grafo[destino] = [arista_origen] impresion = pformat(self.grafo, width=40) impresion+='\n' self.ui.salida.insertPlainText(impresion) @Slot() def dibujar(self): #print('dibujar') pen = QPen() pen.setWidth(2) for particula in self.administrador: r = particula.red g = particula.green b = particula.blue color = QColor(r, g, b) pen.setColor(color) x_origen = particula.origen_x y_origen = particula.origen_y x_destino = particula.destino_x y_destino = particula.destino_y self.scene.addEllipse(x_origen, y_origen, 6, 6, pen) self.scene.addEllipse(x_destino, y_destino, 6, 6, pen) self.scene.addLine(x_origen+3, y_origen+3, x_destino+3, y_destino+3, pen) @Slot() def limpiar(self): #print('limpiar') self.scene.clear() self.ui.graphicsView.setTransform(QTransform()) @Slot() def buscar_id(self): id = self.ui.buscar_lineEdit.text() encontrado = False for particula in self.administrador: if id == particula.id: self.ui.tabla.clear() self.ui.tabla.setRowCount(1) #Construir widgets id_widget = QTableWidgetItem(particula.id) origen_x_widget = QTableWidgetItem(str(particula.origen_x)) origen_y_widget = QTableWidgetItem(str(particula.origen_x)) destino_x_widget = QTableWidgetItem(str(particula.destino_x)) destino_y_widget = QTableWidgetItem(str(particula.destino_x)) velocidad_widget = QTableWidgetItem(str(particula.velocidad)) red_widget = QTableWidgetItem(str(particula.red)) green_widget = QTableWidgetItem(str(particula.green)) blue_widget = QTableWidgetItem(str(particula.blue)) distancia_widget = QTableWidgetItem(str(particula.distancia)) #Agregar widgets a cada columna self.ui.tabla.setItem(0, 0, id_widget) self.ui.tabla.setItem(0, 1, origen_x_widget) self.ui.tabla.setItem(0, 2, origen_y_widget) self.ui.tabla.setItem(0, 3, destino_x_widget) self.ui.tabla.setItem(0, 4, destino_y_widget) self.ui.tabla.setItem(0, 5, velocidad_widget) self.ui.tabla.setItem(0, 6, red_widget) self.ui.tabla.setItem(0, 7, green_widget) self.ui.tabla.setItem(0, 8, blue_widget) self.ui.tabla.setItem(0, 9, distancia_widget) encontrado = True return if not encontrado: QMessageBox.warning( self, "Atención", f'La particula con el id "{id}" no fue encontrada' ) @Slot() def mostrar_tabla(self): self.ui.tabla.setColumnCount(10) #Genera 10 columnas headers = ["ID", "Origen x", "Origen y", "Destino x", "Destino y", "Velocidad", "Red", "Green", "Blue", "Distancia"] self.ui.tabla.setHorizontalHeaderLabels(headers) self.ui.tabla.setRowCount(len(self.administrador)) row = 0 for particula in self.administrador: #Construir widgets id_widget = QTableWidgetItem(particula.id) origen_x_widget = QTableWidgetItem(str(particula.origen_x)) origen_y_widget = QTableWidgetItem(str(particula.origen_x)) destino_x_widget = QTableWidgetItem(str(particula.destino_x)) destino_y_widget = QTableWidgetItem(str(particula.destino_x)) velocidad_widget = QTableWidgetItem(str(particula.velocidad)) red_widget = QTableWidgetItem(str(particula.red)) green_widget = QTableWidgetItem(str(particula.green)) blue_widget = QTableWidgetItem(str(particula.blue)) distancia_widget = QTableWidgetItem(str(particula.distancia)) #Agregar widgets a cada columna self.ui.tabla.setItem(row, 0, id_widget) self.ui.tabla.setItem(row, 1, origen_x_widget) self.ui.tabla.setItem(row, 2, origen_y_widget) self.ui.tabla.setItem(row, 3, destino_x_widget) self.ui.tabla.setItem(row, 4, destino_y_widget) self.ui.tabla.setItem(row, 5, velocidad_widget) self.ui.tabla.setItem(row, 6, red_widget) self.ui.tabla.setItem(row, 7, green_widget) self.ui.tabla.setItem(row, 8, blue_widget) self.ui.tabla.setItem(row, 9, distancia_widget) row += 1 @Slot() def action_abrir_archivo(self): ubicacion = QFileDialog.getOpenFileName( self, 'Abrir archivo', '.', 'JSON (*.json)' )[0] if self.administrador.abrir(ubicacion): QMessageBox.information( self, "Éxito", "Se abrió el archivo " + ubicacion ) else: QMessageBox.critical( self, "Error", "Error al abrir el archivo " + ubicacion ) @Slot() def action_guardar_archivo(self): ubicacion = QFileDialog.getSaveFileName( self, 'Guardar Archivo', #Lo abrirá desde donde se corre '.', #Extensión del archivo 'JSON (*.json)' )[0] print(ubicacion) if self.administrador.guardar(ubicacion): QMessageBox.information( self, "Éxito", "Se pudo crear el archivo " + ubicacion ) else: QMessageBox.critical( self, "Error", "No se pudo crear el archivo " + ubicacion ) @Slot() def click_mostrar(self): #self.administrador.mostrar() self.ui.salida.clear() self.ui.salida.insertPlainText(str(self.administrador)) @Slot() #Definición de Slot def click_agregar(self): ID = self.ui.ID_lineEdit.text() origenX = self.ui.origenX_spinBox.value() origenY = self.ui.origenY_spinBox.value() destinoX = self.ui.destinoX_spinBox.value() destinoY = self.ui.destinoY_spinBox.value() velocidad = self.ui.velocidad_spinBox.value() red = self.ui.red_spinBox.value() green = self.ui.green_spinBox.value() blue = self.ui.blue_spinBox.value() particula = Particula(ID, origenX, origenY, destinoX, destinoY, velocidad, red, green, blue) self.administrador.agregar_final(particula) @Slot() #Definición de Slot def click_agregarInicio(self): ID = self.ui.ID_lineEdit.text() origenX = self.ui.origenX_spinBox.value() origenY = self.ui.origenY_spinBox.value() destinoX = self.ui.destinoX_spinBox.value() destinoY = self.ui.destinoY_spinBox.value() velocidad = self.ui.velocidad_spinBox.value() red = self.ui.red_spinBox.value() green = self.ui.green_spinBox.value() blue = self.ui.blue_spinBox.value() particula = Particula(ID, origenX, origenY, destinoX, destinoY, velocidad, red, green, blue) self.administrador.agregar_inicio(particula)
class MainWindow(QMainWindow): # funcion def __init__(self): # super ==> metodo super(MainWindow, self).__init__() # self se usa para que nuestro objeto exista globalmente y no solo en el constructor. self.administrador = Administrador() # Ui_MainWindow() ==> objeto referenciado self.ui = Ui_MainWindow() # setupUi ==> metodo para enbeber la instruccion self.ui.setupUi(self) # conectar las instrucciones de "conectar_final", # "conectar_inicio" y "mostrar" self.ui.agregar_final_pushButton.clicked.connect(self.click_agregar) self.ui.agregar_inicio_pushButton.clicked.connect(self.click_agregar_inicio) self.ui.mostrar_pushButton.clicked.connect(self.click_mostrar) # conectar las acciones self.ui.actionAbrir.triggered.connect(self.action_abrir_archivo) self.ui.actionGuardar.triggered.connect(self.action_guardar_archivo) # Botones para mostrar la tabla y buscar self.ui.mostrar_tabla_pushButton.clicked.connect(self.mostrar_tabla) self.ui.buscar_pushButton.clicked.connect(self.buscar_identificador) # buscar libros @Slot() def buscar_identificador(self): identificador = self.ui.buscar_lineEdit.text() # bandera encontrado = False for particula in self.administrador: if identificador == particula.identificador: self.ui.tabla.clear() self.ui.tabla.setRowCount(1) # asignar 10 columnas en la tabla self.ui.tabla.setColumnCount(10) # asigna nombres a las columnas headers = ["ID", "Origen X", "Origen Y", "Destino X", "Destino Y", "Velocidad", "Red", "Green", "Blue", "Distancia"] # presenta la coleccion "headers" en el encabezado de las columnas self.ui.tabla.setHorizontalHeaderLabels(headers) identificador_widget = QTableWidgetItem(str(particula.identificador)) origenx_widget = QTableWidgetItem(str(particula.origenx)) origeny_widget = QTableWidgetItem(str(particula.origeny)) destinox_widget = QTableWidgetItem(str(particula.destinox)) destinoy_widget = QTableWidgetItem(str(particula.destinoy)) velocidad_widget = QTableWidgetItem(str(particula.velocidad)) red_widget = QTableWidgetItem(str(particula.red)) green_widget = QTableWidgetItem(str(particula.green)) blue_widget = QTableWidgetItem(str(particula.blue)) distancia_widget = QTableWidgetItem(str(particula.distancia)) # imprimir solo una particula en la fila self.ui.tabla.setItem(0, 0, identificador_widget) self.ui.tabla.setItem(0, 1, origenx_widget) self.ui.tabla.setItem(0, 2, origeny_widget) self.ui.tabla.setItem(0, 3, destinox_widget) self.ui.tabla.setItem(0, 4, destinoy_widget) self.ui.tabla.setItem(0, 5, velocidad_widget) self.ui.tabla.setItem(0, 6, red_widget) self.ui.tabla.setItem(0, 7, green_widget) self.ui.tabla.setItem(0, 8, blue_widget) self.ui.tabla.setItem(0, 9, distancia_widget) # validador de la bandera encontrado = True return # negacion de bandera if not encontrado: QMessageBox.warning( self, "Aviso", f'La partícula con identificador "{identificador}" no fue encontrada' ) # funcionamiento del boton de mostrar_tabla @Slot() def mostrar_tabla(self): # asignar 10 columnas en la tabla self.ui.tabla.setColumnCount(10) # asigna nombres a las columnas headers = ["ID", "Origen X", "Origen Y", "Destino X", "Destino Y", "Velocidad", "Red", "Green", "Blue", "Distancia"] # presenta la coleccion "headers" en el encabezado de las columnas self.ui.tabla.setHorizontalHeaderLabels(headers) # asignacion de filas # len(self.libreria) ==> metodo para obtener la cantidad de elementos en la lista self.ui.tabla.setRowCount(len(self.administrador)) row = 0 # sacarparticulas del administrador for particula in self.administrador: identificador_widget = QTableWidgetItem(str(particula.identificador)) origenx_widget = QTableWidgetItem(str(particula.origenx)) origeny_widget = QTableWidgetItem(str(particula.origeny)) destinox_widget = QTableWidgetItem(str(particula.destinox)) destinoy_widget = QTableWidgetItem(str(particula.destinoy)) velocidad_widget = QTableWidgetItem(str(particula.velocidad)) red_widget = QTableWidgetItem(str(particula.red)) green_widget = QTableWidgetItem(str(particula.green)) blue_widget = QTableWidgetItem(str(particula.blue)) distancia_widget = QTableWidgetItem(str(particula.distancia)) # metodo para asignar posicion a los elementos de cada particula self.ui.tabla.setItem(row, 0, identificador_widget) self.ui.tabla.setItem(row, 1, origenx_widget) self.ui.tabla.setItem(row, 2, origeny_widget) self.ui.tabla.setItem(row, 3, destinox_widget) self.ui.tabla.setItem(row, 4, destinoy_widget) self.ui.tabla.setItem(row, 5, velocidad_widget) self.ui.tabla.setItem(row, 6, red_widget) self.ui.tabla.setItem(row, 7, green_widget) self.ui.tabla.setItem(row, 8, blue_widget) self.ui.tabla.setItem(row, 9, distancia_widget) #incrementar el contador de filas row += 1 @Slot() def action_abrir_archivo(self): ubicacion = QFileDialog.getOpenFileName( self, 'Abrir Archivo', '.', 'JSON (*.json)' )[0] if self.administrador.abrir(ubicacion): QMessageBox.information( self, "Abrir", "Se abrió el archivo " + '\n' '\n' + ubicacion ) else: QMessageBox.critical( self, "Abrir", "Error al abrir el archivo " + '\n' '\n' + ubicacion ) @Slot() def action_guardar_archivo(self): # getSaveFileName ==> metodo para recibir parametros y guardarlos # ubicacion: asigna posiciones desde cero ubicacion = QFileDialog.getSaveFileName( self, # el dialogo se lanza desde aqui 'Guardar Archivo', # titulo de la ventana de dialogo '.', # directorio desde el que se corre el archivo ejecutable, desde la carpeta del proyecto 'JSON (*.json)' # extencion del archivo a guardar )[0] print(ubicacion) if self.administrador.guardar(ubicacion): QMessageBox.information( self, "Guardar", "Archivo guardado en: " + '\n' '\n' + ubicacion ) else: QMessageBox.critical( self, "Guardar", "Archivo no guardado: " + '\n' '\n' + ubicacion ) @Slot() def click_mostrar(self): # limpiar pantalla de PlaintText self.ui.salida.clear() # salida datos introducidos por pantalla self.ui.salida.insertPlainText(str(self.administrador)) # funcion Slot para recibir eventos @Slot() def click_agregar(self): # funcion de botones # obtener infornacion para las variables # .tex() ==> estrae el texto ingresado # self. ==> esta asociado a las variables globales de el programa identificador = self.ui.identificador_lineEdit.text() origenx = self.ui.origen_x_spinBox.value() origeny = self.ui.origen_y_spinBox.value() destinox = self.ui.destino_x_spinBox.value() destinoy = self.ui.destino_y_spinBox.value() velocidad = self.ui.velocidad_lineEdit.text() red = self.ui.red_spinBox.value() green = self.ui.green_spinBox.value() blue = self.ui.blue_spinBox.value() # .value() regresa un valor entero # elementos de la particula particula = Particula(identificador, origenx, origeny, destinox, destinoy, velocidad, red, green, blue) # asociar el apartado globalmente # mostrar los datos en el recuadro PlainText self.administrador.agregar_final(particula) # funcion Slot para recibir eventos @Slot() def click_agregar_inicio(self): # funcion de botones # obtener infornacion para las variables # .tex() ==> estrae el texto ingresado # self. ==> esta asociado a las variables globales de el programa identificador = self.ui.identificador_lineEdit.text() origenx = self.ui.origen_x_spinBox.value() origeny = self.ui.origen_y_spinBox.value() destinox = self.ui.destino_x_spinBox.value() destinoy = self.ui.destino_y_spinBox.value() velocidad = self.ui.velocidad_lineEdit.text() red = self.ui.red_spinBox.value() green = self.ui.green_spinBox.value() blue = self.ui.blue_spinBox.value() #.value() regresa un valor entero # elementos de la particula particula = Particula(identificador, origenx, origeny, destinox, destinoy, velocidad, red, green, blue) # asociar el apartado globalmente # mostrar los datos en el recuadro PlainText self.administrador.agregar_inicio(particula)