Example #1
0
    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)
Example #4
0
 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)
Example #6
0
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)