Esempio n. 1
0
class UI_equipment(parents.UI_equip):
    """Diálogo de definición de filtros de mangas"""
    def __init__(self, entrada=None, parent=None):
        """entrada: Parametro opcional de clase corriente que indica la corriente de entrada"""
        super(UI_equipment, self).__init__(Baghouse,
                                           entrada=False,
                                           parent=parent)
        self.entrada = entrada

        #Pestaña entrada
        self.Entrada = UI_corriente.Ui_corriente(entrada)
        self.Entrada.Changed.connect(self.cambiar_entrada)
        self.tabWidget.insertTab(
            0, self.Entrada,
            QtWidgets.QApplication.translate("equipment", "Entrada", None))

        #Pestaña definición rendimientos
        self.Rendimientos = QtWidgets.QTableWidget(1, 2)
        self.Rendimientos.setItemDelegateForColumn(1, CellEditor(self))
        self.Rendimientos.setSelectionBehavior(
            QtWidgets.QAbstractItemView.SelectRows)
        self.Rendimientos.verticalHeader().hide()
        self.Rendimientos.setEditTriggers(
            QtWidgets.QAbstractItemView.AllEditTriggers)
        if self.entrada:
            self.rellenarTablaRendimientos()
        self.rendimientos = []
        self.Rendimientos.cellChanged.connect(self.cambiarRendimientos)
        self.tabWidget.insertTab(
            1, self.Rendimientos,
            QtWidgets.QApplication.translate("equipment", "Rendimientos",
                                             None))

        #Cálculo
        gridLayout_Calculo = QtWidgets.QGridLayout(self.tabCalculo)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Tipo de cálculo:", None)), 1,
            1, 1, 1)
        self.TipoCalculo = QtWidgets.QComboBox()
        self.TipoCalculo.addItem(
            QtWidgets.QApplication.translate("equipment",
                                             "Calcular caída de presión",
                                             None))
        self.TipoCalculo.addItem(
            QtWidgets.QApplication.translate("equipment",
                                             "Calcular tiempo de filtración",
                                             None))
        self.TipoCalculo.addItem(
            QtWidgets.QApplication.translate("equipment",
                                             "Calcular número de filtros",
                                             None))
        self.TipoCalculo.currentIndexChanged.connect(self.tipoCalculoCambiado)
        gridLayout_Calculo.addWidget(self.TipoCalculo, 1, 2, 1, 4)
        gridLayout_Calculo.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 2, 1, 1, 6)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Nº de filtros:",
                                                 None)), 3, 1, 1, 1)
        self.numFiltros = Entrada_con_unidades(int,
                                               spinbox=True,
                                               step=1,
                                               width=50,
                                               resaltado=True,
                                               min=1,
                                               start=1)
        self.numFiltros.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.numFiltros, 3, 2, 1, 1)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Tiempo de filtración:",
                                                 None)), 4, 1, 1, 1)
        self.tiempo = Entrada_con_unidades(unidades.Time, resaltado=True)
        self.tiempo.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.tiempo, 4, 2, 1, 1)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Pérdida de presión:", None)),
            5, 1, 1, 1)
        self.deltaP = Entrada_con_unidades(unidades.Pressure,
                                           retornar=False,
                                           readOnly=True)
        self.deltaP.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.deltaP, 5, 2, 1, 1)
        gridLayout_Calculo.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 6, 1, 1, 6)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Membranas por filtro:",
                                                 None)), 7, 1, 1, 1)
        self.MembranaCelda = Entrada_con_unidades(int,
                                                  spinbox=True,
                                                  step=1,
                                                  width=70,
                                                  value=78,
                                                  min=1)
        self.MembranaCelda.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.MembranaCelda, 7, 2, 1, 1)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Diametro de membrana:",
                                                 None)), 8, 1, 1, 1)
        self.Diametro = Entrada_con_unidades(unidades.Length,
                                             value=unidades.Length(0.5, "ft"))
        self.Diametro.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.Diametro, 8, 2, 1, 1)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Area por membrana:", None)),
            9, 1, 1, 1)
        self.Area = Entrada_con_unidades(unidades.Area,
                                         value=unidades.Area(16, "ft2"))
        self.Area.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.Area, 9, 2, 1, 1)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Resistencia filtro:", None)),
            7, 4, 1, 1)
        self.resistenciaFiltro = Entrada_con_unidades(float,
                                                      spinbox=True,
                                                      step=0.01,
                                                      width=70,
                                                      value=0.84,
                                                      min=0)
        self.resistenciaFiltro.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.resistenciaFiltro, 7, 5, 1, 1)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Resistencia torta:", None)),
            8, 4, 1, 1)
        self.resistenciaTorta = Entrada_con_unidades(float,
                                                     spinbox=True,
                                                     step=0.01,
                                                     width=70,
                                                     value=0.1,
                                                     min=0)
        self.resistenciaTorta.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.resistenciaTorta, 8, 5, 1, 1)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Filtros en limpieza:",
                                                 None)), 9, 4, 1, 1)
        self.Limpieza = Entrada_con_unidades(int,
                                             spinbox=True,
                                             step=1,
                                             width=70,
                                             value=1,
                                             min=0)
        self.Limpieza.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.Limpieza, 9, 5, 1, 1)
        gridLayout_Calculo.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 10, 1, 1,
            6)

        self.groupBox_Calculo = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("equipment", "Datos calculados",
                                             None))
        gridLayout_Calculo.addWidget(self.groupBox_Calculo, 11, 1, 1, 5)
        self.gridLayout_1 = QtWidgets.QGridLayout(self.groupBox_Calculo)
        self.gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "V<sub>gas</sub>:", None)), 0,
            1, 1, 1)
        self.Vgas = Entrada_con_unidades(unidades.Speed,
                                         retornar=False,
                                         readOnly=True)
        self.gridLayout_1.addWidget(self.Vgas, 0, 2, 1, 1)
        self.gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Rendimiento:",
                                                 None)), 1, 1, 1, 1)
        self.rendimientoCalculado = Entrada_con_unidades(float, readOnly=True)
        self.gridLayout_1.addWidget(self.rendimientoCalculado, 1, 2, 1, 1)
        self.gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Superficie:",
                                                 None)), 2, 1, 1, 1)
        self.superficie = Entrada_con_unidades(unidades.Area, readOnly=True)
        self.gridLayout_1.addWidget(self.superficie, 2, 2, 1, 1)
        gridLayout_Calculo.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 12, 1, 1,
            6)

        #Salidas
        self.SalidaGas = UI_corriente.Ui_corriente(readOnly=True)
        self.SalidaSolido = UI_corriente.Ui_corriente(readOnly=True)
        self.Salida.addTab(
            self.SalidaGas,
            QtWidgets.QApplication.translate("equipment", "Gas filtrado",
                                             None))
        self.Salida.addTab(
            self.SalidaSolido,
            QtWidgets.QApplication.translate("equipment", "Sólidos recogidos",
                                             None))

        self.tabWidget.setCurrentIndex(0)

    def cambiar_entrada(self, corriente):
        self.entrada = corriente
        self.rellenarTablaRendimientos()
        self.calculo()

    def rellenarTablaRendimientos(self):
        self.Rendimientos.clearContents()
        self.Rendimientos.setRowCount(len(self.entrada.solido.distribucion))
        self.Rendimientos.setHorizontalHeaderLabels([
            QtWidgets.QApplication.translate("equipment", "Diámetro, µm",
                                             None),
            QtWidgets.QApplication.translate("equipment", "Rendimiento", None)
        ])
        for i in range(len(self.entrada.solido.distribucion)):
            self.Rendimientos.setRowHeight(i, 22)
            self.Rendimientos.setItem(
                i, 0,
                QtWidgets.QTableWidgetItem(
                    representacion(1e6 * self.entrada.solido.diametros[i])))
            self.Rendimientos.item(
                i, 0).setTextAlignment(QtCore.Qt.AlignRight
                                       | QtCore.Qt.AlignVCenter)
            self.Rendimientos.item(i, 0).setFlags(QtCore.Qt.ItemIsSelectable
                                                  | QtCore.Qt.ItemIsEnabled)
            self.Rendimientos.setItem(i, 1, QtWidgets.QTableWidgetItem(""))
            self.Rendimientos.item(
                i, 1).setTextAlignment(QtCore.Qt.AlignRight
                                       | QtCore.Qt.AlignVCenter)

    def cambiarRendimientos(self, fila, columna):
        numero = float(self.Rendimientos.item(fila, columna).text())
        if numero < 0 or numero > 1:
            self.Rendimientos.item(fila, columna).setText("")
        else:
            if self.rendimientos == []:
                self.rendimientos = [0] * self.Rendimientos.rowCount()
            self.rendimientos[fila] = numero

    def todos_datos(self):
        if self.TipoCalculo.currentIndex() == 0:
            todos_datos = self.numFiltros.value and self.tiempo.value
        elif self.TipoCalculo.currentIndex() == 1:
            todos_datos = self.numFiltros.value and self.deltaP.value
        else:
            todos_datos = self.tiempo.value and self.deltaP.value
        return todos_datos and self.Entrada.todos_datos()

    def calculo(self):
        if self.todos_datos():
            if self.Limpieza.value == self.numFiltros.value:
                self.status.setState(
                    5,
                    QtWidgets.QApplication.translate(
                        "equipment", "Todos los filtros en limpieza", None))
            else:
                self.status.setState(4)
                self.Equipment(entrada=self.entrada,
                               metodo=self.TipoCalculo.currentIndex(),
                               num_filtros=self.numFiltros.value,
                               tiempo=self.tiempo.value,
                               deltaP=self.deltaP.value.atm,
                               resistenciaFiltro=self.resistenciaFiltro.value,
                               resistenciaTorta=self.resistenciaTorta.value,
                               limpieza=self.Limpieza.value,
                               membranasFiltro=self.MembranaCelda.value,
                               diametroMembrana=self.Diametro.value,
                               areaMembrana=self.Area.value,
                               rendimientos=self.rendimientos)
                self.rellenoSalida()
                if self.rendimientos == []:
                    self.status.setState(
                        3,
                        QtWidgets.QApplication.translate(
                            "equipment", "Usando rendimiento por defecto",
                            None))
                else:
                    self.status.setState(1)

    def rellenoSalida(self):
        if self.TipoCalculo.currentIndex() == 0:
            self.deltaP.setValue(self.Equipment.deltaP)
        elif self.TipoCalculo.currentIndex() == 1:
            self.tiempo.setValue(self.Equipment.tiempo)
        else:
            self.numFiltros.setValue(self.Equipment.num_filtros)

        self.Vgas.setValue(self.Equipment.Vgas)
        self.rendimientoCalculado.setValue(self.Equipment.rendimiento)
        self.superficie.setValue(self.Equipment.floorArea)
        self.SalidaGas.rellenar(self.Equipment.SalidaAire)
        self.SalidaSolido.rellenar(self.Equipment.SalidaSolido)

    def tipoCalculoCambiado(self, tipo_calculo):
        if tipo_calculo == 0:
            self.numFiltros.setReadOnly(False)
            self.numFiltros.setRetornar(True)
            self.numFiltros.setResaltado(True)
            self.tiempo.setReadOnly(False)
            self.tiempo.setRetornar(True)
            self.tiempo.setResaltado(True)
            self.deltaP.setReadOnly(True)
            self.deltaP.setRetornar(False)
            self.deltaP.setResaltado(False)
        elif tipo_calculo == 1:
            self.numFiltros.setReadOnly(False)
            self.numFiltros.setRetornar(True)
            self.numFiltros.setResaltado(True)
            self.tiempo.setReadOnly(True)
            self.tiempo.setRetornar(False)
            self.tiempo.setResaltado(False)
            self.deltaP.setReadOnly(False)
            self.deltaP.setRetornar(True)
            self.deltaP.setResaltado(True)
        else:
            self.numFiltros.setReadOnly(True)
            self.numFiltros.setRetornar(False)
            self.numFiltros.setResaltado(False)
            self.tiempo.setReadOnly(False)
            self.tiempo.setRetornar(True)
            self.tiempo.setResaltado(True)
            self.deltaP.setReadOnly(False)
            self.deltaP.setRetornar(True)
            self.deltaP.setResaltado(True)
Esempio n. 2
0
class UI_equipment(UI_equip):
    """Gravity chamber equipment edition dialog"""
    Equipment = GravityChamber()

    def __init__(self, equipment=None, parent=None):
        """
        equipment: Initial equipment instance to model
        """
        super().__init__(GravityChamber, entrada=False, parent=parent)

        # Calculate tab
        lyt_Calc = QtWidgets.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Mode")), 1, 1, 1, 1)
        self.metodo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_TIPO:
            self.metodo.addItem(txt)
        self.metodo.currentIndexChanged.connect(self.tipoCalculoCambiado)
        lyt_Calc.addWidget(self.metodo, 1, 2, 1, 4)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Model")), 2, 1, 1, 1)
        self.modelo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MODEL:
            self.modelo.addItem(txt)
        self.modelo.currentIndexChanged.connect(partial(self.changeParams,
                                                        "modelo"))
        lyt_Calc.addWidget(self.modelo, 2, 2, 1, 1)
        lyt_Calc.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            3, 1, 1, 6)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Width")), 4, 1, 1, 1)
        self.W = Entrada_con_unidades(Length)
        self.W.valueChanged.connect(partial(self.changeParams, "W"))
        lyt_Calc.addWidget(self.W, 4, 2, 1, 1)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Height")), 5, 1, 1, 1)
        self.H = Entrada_con_unidades(Length)
        self.H.valueChanged.connect(partial(self.changeParams, "H"))
        lyt_Calc.addWidget(self.H, 5, 2, 1, 1)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Length")), 6, 1, 1, 1)
        self.L = Entrada_con_unidades(Length)
        self.L.valueChanged.connect(partial(self.changeParams, "L"))
        lyt_Calc.addWidget(self.L, 6, 2, 1, 1)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Allowable efficiency")), 7, 1, 1, 1)
        self.rendimientoAdmisible = Entrada_con_unidades(
            float, spinbox=True, max=1)
        self.rendimientoAdmisible.valueChanged.connect(
            partial(self.changeParams, "rendimientoAdmisible"))
        lyt_Calc.addWidget(self.rendimientoAdmisible, 7, 2, 1, 1)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Allowable speed")), 8, 1, 1, 1)
        self.velocidadAdmisible = Entrada_con_unidades(Speed)
        self.velocidadAdmisible.valueChanged.connect(
            partial(self.changeParams, "velocidadAdmisible"))
        lyt_Calc.addWidget(self.velocidadAdmisible, 8, 2, 1, 1)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Pressure loss")), 9, 1, 1, 1)
        self.deltaP = Entrada_con_unidades(DeltaP)
        self.deltaP.valueChanged.connect(partial(self.changeParams, "deltaP"))
        lyt_Calc.addWidget(self.deltaP, 9, 2, 1, 1)

        lyt_Calc.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 10, 1, 1, 6)
        group_Calc = QtWidgets.QGroupBox(QtWidgets.QApplication.translate(
            "pychemqt", "Results"))
        lyt_Calc.addWidget(group_Calc, 11, 1, 1, 5)
        lyt = QtWidgets.QGridLayout(group_Calc)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Flow")), 0, 1)
        self.Q = Entrada_con_unidades(VolFlow, "QGas", retornar=False)
        self.Q.setReadOnly(True)
        lyt.addWidget(self.Q, 0, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "V<sub>gas</sub>")), 1, 1)
        self.Vgas = Entrada_con_unidades(Speed, retornar=False, readOnly=True)
        lyt.addWidget(self.Vgas, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Efficiency")), 2, 1)
        self.rendimiento = Entrada_con_unidades(float, retornar=False)
        self.rendimiento.setReadOnly(True)
        lyt.addWidget(self.rendimiento, 2, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Height")), 0, 4)
        self.HCalc = Entrada_con_unidades(Length, retornar=False)
        self.HCalc.setReadOnly(True)
        lyt.addWidget(self.HCalc, 0, 5)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Width")), 1, 4)
        self.WCalc = Entrada_con_unidades(Length, retornar=False)
        self.WCalc.setReadOnly(True)
        lyt.addWidget(self.WCalc, 1, 5)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Length")), 2, 4)
        self.LCalc = Entrada_con_unidades(Length, retornar=False)
        self.LCalc.setReadOnly(True)
        lyt.addWidget(self.LCalc, 2, 5)
        lyt_Calc.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 12, 1, 1, 6)

        # Output tab
        self.addSalida(
            QtWidgets.QApplication.translate("pychemqt", "Filtered gas"))
        self.addSalida(
            QtWidgets.QApplication.translate("pychemqt", "Collected solids"))

        self.tipoCalculoCambiado(0)
        if equipment:
            self.setEquipment(equipment)

    def tipoCalculoCambiado(self, int):
        self.W.setReadOnly(int)
        self.W.setRetornar(not int)
        self.W.setResaltado(not int)
        self.H.setResaltado(not int)
        self.L.setReadOnly(int)
        self.L.setRetornar(not int)
        self.L.setResaltado(not int)
        self.rendimientoAdmisible.setReadOnly(not int)
        self.rendimientoAdmisible.setResaltado(int)
        self.velocidadAdmisible.setReadOnly(not int)
        self.velocidadAdmisible.setResaltado(False)
        self.changeParams("metodo", int)
Esempio n. 3
0
class UI_equipment(UI_equip):
    """Gravity chamber equipment edition dialog"""
    Equipment = GravityChamber()

    def __init__(self, equipment=None, parent=None):
        """
        equipment: Initial equipment instance to model
        """
        super(UI_equipment, self).__init__(GravityChamber,
                                           entrada=False,
                                           parent=parent)

        # Calculate tab
        lyt_Calc = QtGui.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Mode")), 1,
            1, 1, 1)
        self.metodo = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_TIPO:
            self.metodo.addItem(txt)
        self.metodo.currentIndexChanged.connect(self.tipoCalculoCambiado)
        lyt_Calc.addWidget(self.metodo, 1, 2, 1, 4)
        lyt_Calc.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Model")), 2,
            1, 1, 1)
        self.modelo = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_MODEL:
            self.modelo.addItem(txt)
        self.modelo.currentIndexChanged.connect(
            partial(self.changeParams, "modelo"))
        lyt_Calc.addWidget(self.modelo, 2, 2, 1, 1)
        lyt_Calc.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 3, 1, 1, 6)
        lyt_Calc.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Width")), 4,
            1, 1, 1)
        self.W = Entrada_con_unidades(Length)
        self.W.valueChanged.connect(partial(self.changeParams, "W"))
        lyt_Calc.addWidget(self.W, 4, 2, 1, 1)
        lyt_Calc.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Height")),
            5, 1, 1, 1)
        self.H = Entrada_con_unidades(Length)
        self.H.valueChanged.connect(partial(self.changeParams, "H"))
        lyt_Calc.addWidget(self.H, 5, 2, 1, 1)
        lyt_Calc.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Length")),
            6, 1, 1, 1)
        self.L = Entrada_con_unidades(Length)
        self.L.valueChanged.connect(partial(self.changeParams, "L"))
        lyt_Calc.addWidget(self.L, 6, 2, 1, 1)
        lyt_Calc.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Allowable efficiency")), 7, 1, 1,
            1)
        self.rendimientoAdmisible = Entrada_con_unidades(float,
                                                         spinbox=True,
                                                         max=1)
        self.rendimientoAdmisible.valueChanged.connect(
            partial(self.changeParams, "rendimientoAdmisible"))
        lyt_Calc.addWidget(self.rendimientoAdmisible, 7, 2, 1, 1)
        lyt_Calc.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Allowable speed")),
            8, 1, 1, 1)
        self.velocidadAdmisible = Entrada_con_unidades(Speed)
        self.velocidadAdmisible.valueChanged.connect(
            partial(self.changeParams, "velocidadAdmisible"))
        lyt_Calc.addWidget(self.velocidadAdmisible, 8, 2, 1, 1)
        lyt_Calc.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Pressure loss")), 9,
            1, 1, 1)
        self.deltaP = Entrada_con_unidades(DeltaP)
        self.deltaP.valueChanged.connect(partial(self.changeParams, "deltaP"))
        lyt_Calc.addWidget(self.deltaP, 9, 2, 1, 1)

        lyt_Calc.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 10, 1, 1, 6)
        group_Calc = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Results"))
        lyt_Calc.addWidget(group_Calc, 11, 1, 1, 5)
        lyt = QtGui.QGridLayout(group_Calc)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Flow")), 0,
            1)
        self.Q = Entrada_con_unidades(VolFlow, "QGas", retornar=False)
        self.Q.setReadOnly(True)
        lyt.addWidget(self.Q, 0, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "V<sub>gas</sub>")),
            1, 1)
        self.Vgas = Entrada_con_unidades(Speed, retornar=False, readOnly=True)
        lyt.addWidget(self.Vgas, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Efficiency")), 2, 1)
        self.rendimiento = Entrada_con_unidades(float, retornar=False)
        self.rendimiento.setReadOnly(True)
        lyt.addWidget(self.rendimiento, 2, 2)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Height")),
            0, 4)
        self.HCalc = Entrada_con_unidades(Length, retornar=False)
        self.HCalc.setReadOnly(True)
        lyt.addWidget(self.HCalc, 0, 5)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Width")), 1,
            4)
        self.WCalc = Entrada_con_unidades(Length, retornar=False)
        self.WCalc.setReadOnly(True)
        lyt.addWidget(self.WCalc, 1, 5)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Length")),
            2, 4)
        self.LCalc = Entrada_con_unidades(Length, retornar=False)
        self.LCalc.setReadOnly(True)
        lyt.addWidget(self.LCalc, 2, 5)
        lyt_Calc.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 12, 1, 1, 6)

        # Output tab
        self.addSalida(QtGui.QApplication.translate("pychemqt",
                                                    "Filtered gas"))
        self.addSalida(
            QtGui.QApplication.translate("pychemqt", "Collected solids"))

        self.tipoCalculoCambiado(0)
        if equipment:
            self.setEquipment(equipment)

    def tipoCalculoCambiado(self, int):
        self.W.setReadOnly(int)
        self.W.setRetornar(not int)
        self.W.setResaltado(not int)
        self.H.setResaltado(not int)
        self.L.setReadOnly(int)
        self.L.setRetornar(not int)
        self.L.setResaltado(not int)
        self.rendimientoAdmisible.setReadOnly(not int)
        self.rendimientoAdmisible.setResaltado(int)
        self.velocidadAdmisible.setReadOnly(not int)
        self.velocidadAdmisible.setResaltado(False)
        self.changeParams("metodo", int)
Esempio n. 4
0
class UI_equipment(parents.UI_equip):
    """Diálogo de definición de filtros de mangas"""
    def __init__(self, entrada=None, parent=None):
        """entrada: Parametro opcional de clase corriente que indica la corriente de entrada"""
        super(UI_equipment, self).__init__(Baghouse, entrada=False, parent=parent)
        self.entrada=entrada

        #Pestaña entrada
        self.Entrada= UI_corriente.Ui_corriente(entrada)
        self.Entrada.Changed.connect(self.cambiar_entrada)
        self.tabWidget.insertTab(0, self.Entrada,QtGui.QApplication.translate("equipment", "Entrada", None, QtGui.QApplication.UnicodeUTF8))

        #Pestaña definición rendimientos
        self.Rendimientos= QtGui.QTableWidget(1, 2)
        self.Rendimientos.setItemDelegateForColumn(1, CellEditor(self))
        self.Rendimientos.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
        self.Rendimientos.verticalHeader().hide()
        self.Rendimientos.setEditTriggers(QtGui.QAbstractItemView.AllEditTriggers)
        if self.entrada:
            self.rellenarTablaRendimientos()
        self.rendimientos=[]
        self.Rendimientos.cellChanged.connect(self.cambiarRendimientos)
        self.tabWidget.insertTab(1, self.Rendimientos,QtGui.QApplication.translate("equipment", "Rendimientos", None, QtGui.QApplication.UnicodeUTF8))

        #Cálculo
        gridLayout_Calculo = QtGui.QGridLayout(self.tabCalculo)
        gridLayout_Calculo.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Tipo de cálculo:", None, QtGui.QApplication.UnicodeUTF8)), 1, 1, 1, 1)
        self.TipoCalculo=QtGui.QComboBox()
        self.TipoCalculo.addItem(QtGui.QApplication.translate("equipment", "Calcular caída de presión", None, QtGui.QApplication.UnicodeUTF8))
        self.TipoCalculo.addItem(QtGui.QApplication.translate("equipment", "Calcular tiempo de filtración", None, QtGui.QApplication.UnicodeUTF8))
        self.TipoCalculo.addItem(QtGui.QApplication.translate("equipment", "Calcular número de filtros", None, QtGui.QApplication.UnicodeUTF8))
        self.TipoCalculo.currentIndexChanged.connect(self.tipoCalculoCambiado)
        gridLayout_Calculo.addWidget(self.TipoCalculo, 1, 2, 1, 4)
        gridLayout_Calculo.addItem(QtGui.QSpacerItem(20,20,QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed),2,1,1,6)
        gridLayout_Calculo.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Nº de filtros:", None, QtGui.QApplication.UnicodeUTF8)), 3, 1, 1, 1)
        self.numFiltros=Entrada_con_unidades(int, spinbox=True, step=1, width=50, resaltado=True, min=1, start=1)
        self.numFiltros.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.numFiltros,3,2,1,1)
        gridLayout_Calculo.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Tiempo de filtración:", None, QtGui.QApplication.UnicodeUTF8)), 4, 1, 1, 1)
        self.tiempo=Entrada_con_unidades(unidades.Time, resaltado=True)
        self.tiempo.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.tiempo,4,2,1,1)
        gridLayout_Calculo.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Pérdida de presión:", None, QtGui.QApplication.UnicodeUTF8)), 5, 1, 1, 1)
        self.deltaP=Entrada_con_unidades(unidades.Pressure, retornar=False, readOnly=True)
        self.deltaP.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.deltaP,5,2,1,1)
        gridLayout_Calculo.addItem(QtGui.QSpacerItem(20,20,QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed),6,1,1,6)
        gridLayout_Calculo.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Membranas por filtro:", None, QtGui.QApplication.UnicodeUTF8)), 7, 1, 1, 1)
        self.MembranaCelda=Entrada_con_unidades(int, spinbox=True, step=1, width=70, value=78, min=1)
        self.MembranaCelda.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.MembranaCelda,7,2,1,1)
        gridLayout_Calculo.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Diametro de membrana:", None, QtGui.QApplication.UnicodeUTF8)), 8, 1, 1, 1)
        self.Diametro=Entrada_con_unidades(unidades.Length, value=unidades.Length(0.5, "ft"))
        self.Diametro.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.Diametro,8,2,1,1)
        gridLayout_Calculo.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Area por membrana:", None, QtGui.QApplication.UnicodeUTF8)), 9, 1, 1, 1)
        self.Area=Entrada_con_unidades(unidades.Area, value=unidades.Area(16, "ft2"))
        self.Area.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.Area,9,2,1,1)
        gridLayout_Calculo.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Resistencia filtro:", None, QtGui.QApplication.UnicodeUTF8)), 7, 4, 1, 1)
        self.resistenciaFiltro=Entrada_con_unidades(float, spinbox=True, step=0.01, width=70, value=0.84, min=0)
        self.resistenciaFiltro.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.resistenciaFiltro,7,5,1,1)
        gridLayout_Calculo.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Resistencia torta:", None, QtGui.QApplication.UnicodeUTF8)), 8, 4, 1, 1)
        self.resistenciaTorta=Entrada_con_unidades(float, spinbox=True, step=0.01, width=70, value=0.1, min=0)
        self.resistenciaTorta.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.resistenciaTorta,8,5,1,1)
        gridLayout_Calculo.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Filtros en limpieza:", None, QtGui.QApplication.UnicodeUTF8)), 9, 4, 1, 1)
        self.Limpieza=Entrada_con_unidades(int, spinbox=True, step=1, width=70, value=1, min=0)
        self.Limpieza.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.Limpieza,9,5,1,1)
        gridLayout_Calculo.addItem(QtGui.QSpacerItem(20,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding),10,1,1,6)

        self.groupBox_Calculo = QtGui.QGroupBox(QtGui.QApplication.translate("equipment", "Datos calculados", None, QtGui.QApplication.UnicodeUTF8))
        gridLayout_Calculo.addWidget(self.groupBox_Calculo,11,1,1,5)
        self.gridLayout_1 = QtGui.QGridLayout(self.groupBox_Calculo)
        self.gridLayout_1.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "V<sub>gas</sub>:", None, QtGui.QApplication.UnicodeUTF8)),0,1,1,1)
        self.Vgas=Entrada_con_unidades(unidades.Speed, retornar=False, readOnly=True)
        self.gridLayout_1.addWidget(self.Vgas,0,2,1,1)
        self.gridLayout_1.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Rendimiento:", None, QtGui.QApplication.UnicodeUTF8)),1,1,1,1)
        self.rendimientoCalculado=Entrada_con_unidades(float, readOnly=True)
        self.gridLayout_1.addWidget(self.rendimientoCalculado,1,2,1,1)
        self.gridLayout_1.addWidget(QtGui.QLabel(QtGui.QApplication.translate("equipment", "Superficie:", None, QtGui.QApplication.UnicodeUTF8)),2,1,1,1)
        self.superficie=Entrada_con_unidades(unidades.Area, readOnly=True)
        self.gridLayout_1.addWidget(self.superficie,2,2,1,1)
        gridLayout_Calculo.addItem(QtGui.QSpacerItem(20,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding),12,1,1,6)

        #Salidas
        self.SalidaGas= UI_corriente.Ui_corriente(readOnly=True)
        self.SalidaSolido= UI_corriente.Ui_corriente(readOnly=True)
        self.Salida.addTab(self.SalidaGas,QtGui.QApplication.translate("equipment", "Gas filtrado", None, QtGui.QApplication.UnicodeUTF8))
        self.Salida.addTab(self.SalidaSolido,QtGui.QApplication.translate("equipment", "Sólidos recogidos", None, QtGui.QApplication.UnicodeUTF8))

        self.tabWidget.setCurrentIndex(0)


    def cambiar_entrada(self, corriente):
        self.entrada=corriente
        self.rellenarTablaRendimientos()
        self.calculo()

    def rellenarTablaRendimientos(self):
        self.Rendimientos.clearContents()
        self.Rendimientos.setRowCount(len(self.entrada.solido.distribucion))
        self.Rendimientos.setHorizontalHeaderLabels([QtGui.QApplication.translate("equipment", "Diámetro, µm", None, QtGui.QApplication.UnicodeUTF8), QtGui.QApplication.translate("equipment", "Rendimiento", None, QtGui.QApplication.UnicodeUTF8)])
        for i in range(len(self.entrada.solido.distribucion)):
            self.Rendimientos.setRowHeight(i, 22)
            self.Rendimientos.setItem(i, 0, QtGui.QTableWidgetItem(representacion(1e6*self.entrada.solido.diametros[i])))
            self.Rendimientos.item(i, 0).setTextAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)
            self.Rendimientos.item(i, 0).setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
            self.Rendimientos.setItem(i, 1, QtGui.QTableWidgetItem(""))
            self.Rendimientos.item(i, 1).setTextAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)

    def cambiarRendimientos(self, fila, columna):
        numero=float(self.Rendimientos.item(fila, columna).text())
        if numero<0 or numero >1:
            self.Rendimientos.item(fila, columna).setText("")
        else:
            if self.rendimientos==[]:
                self.rendimientos=[0]*self.Rendimientos.rowCount()
            self.rendimientos[fila]=numero

    def todos_datos(self):
        if self.TipoCalculo.currentIndex()==0:
            todos_datos=self.numFiltros.value and self.tiempo.value
        elif self.TipoCalculo.currentIndex()==1:
            todos_datos=self.numFiltros.value and self.deltaP.value
        else:
            todos_datos=self.tiempo.value and self.deltaP.value
        return todos_datos and self.Entrada.todos_datos()

    def calculo(self):
        if self.todos_datos():
            if self.Limpieza.value==self.numFiltros.value:
                self.status.setState(5, QtGui.QApplication.translate("equipment", "Todos los filtros en limpieza", None, QtGui.QApplication.UnicodeUTF8))
            else:
                self.status.setState(4)
                self.Equipment(entrada=self.entrada, metodo=self.TipoCalculo.currentIndex(), num_filtros=self.numFiltros.value, tiempo=self.tiempo.value, deltaP=self.deltaP.value.atm, resistenciaFiltro=self.resistenciaFiltro.value, resistenciaTorta=self.resistenciaTorta.value, limpieza=self.Limpieza.value, membranasFiltro=self.MembranaCelda.value, diametroMembrana=self.Diametro.value, areaMembrana=self.Area.value, rendimientos=self.rendimientos)
                self.rellenoSalida()
                if self.rendimientos==[]:
                    self.status.setState(3, QtGui.QApplication.translate("equipment", "Usando rendimiento por defecto", None, QtGui.QApplication.UnicodeUTF8))
                else:
                    self.status.setState(1)

    def rellenoSalida(self):
        if self.TipoCalculo.currentIndex()==0:
            self.deltaP.setValue(self.Equipment.deltaP)
        elif self.TipoCalculo.currentIndex()==1:
            self.tiempo.setValue(self.Equipment.tiempo)
        else:
            self.numFiltros.setValue(self.Equipment.num_filtros)

        self.Vgas.setValue(self.Equipment.Vgas)
        self.rendimientoCalculado.setValue(self.Equipment.rendimiento)
        self.superficie.setValue(self.Equipment.floorArea)
        self.SalidaGas.rellenar(self.Equipment.SalidaAire)
        self.SalidaSolido.rellenar(self.Equipment.SalidaSolido)


    def tipoCalculoCambiado(self, tipo_calculo):
        if tipo_calculo==0:
            self.numFiltros.setReadOnly(False)
            self.numFiltros.setRetornar(True)
            self.numFiltros.setResaltado(True)
            self.tiempo.setReadOnly(False)
            self.tiempo.setRetornar(True)
            self.tiempo.setResaltado(True)
            self.deltaP.setReadOnly(True)
            self.deltaP.setRetornar(False)
            self.deltaP.setResaltado(False)
        elif tipo_calculo==1:
            self.numFiltros.setReadOnly(False)
            self.numFiltros.setRetornar(True)
            self.numFiltros.setResaltado(True)
            self.tiempo.setReadOnly(True)
            self.tiempo.setRetornar(False)
            self.tiempo.setResaltado(False)
            self.deltaP.setReadOnly(False)
            self.deltaP.setRetornar(True)
            self.deltaP.setResaltado(True)
        else:
            self.numFiltros.setReadOnly(True)
            self.numFiltros.setRetornar(False)
            self.numFiltros.setResaltado(False)
            self.tiempo.setReadOnly(False)
            self.tiempo.setRetornar(True)
            self.tiempo.setResaltado(True)
            self.deltaP.setReadOnly(False)
            self.deltaP.setRetornar(True)
            self.deltaP.setResaltado(True)