예제 #1
0
class UI_equipment(UI_equip):
    """Compressor equipment edition dialog"""
    Equipment = Compressor()

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

        # Calculate tab
        lyt_Calc = QtWidgets.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Method:")), 1, 1)
        self.metodo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_METODO:
            self.metodo.addItem(txt)
        # self.metodo.addItem(QtWidgets.QApplication.translate(
        # "pychemqt", "Especificar curva de funcionamiento"))
        self.metodo.currentIndexChanged.connect(
            self.on_tipoCalculo_currentIndexChanged)
        lyt_Calc.addWidget(self.metodo, 1, 2, 1, 2)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 2, 0, 1, 4)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Thermodynamic:")), 3, 1)
        self.termodinamica = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_TERMODINAMICA:
            self.termodinamica.addItem(txt)
        self.termodinamica.currentIndexChanged.connect(
            partial(self.changeParams, "termodinamica"))
        lyt_Calc.addWidget(self.termodinamica, 3, 2, 1, 2)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 4, 0, 1, 4)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Out Pressure")),
            5, 1)
        self.Pout = Entrada_con_unidades(Pressure)
        self.Pout.valueChanged.connect(partial(self.changeParams, "Pout"))
        lyt_Calc.addWidget(self.Pout, 5, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Pressure ratio")), 6, 1)
        self.razon = Entrada_con_unidades(float)
        self.razon.valueChanged.connect(partial(self.changeParams, "razon"))
        lyt_Calc.addWidget(self.razon, 6, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 7,
            1)
        self.rendimiento = Entrada_con_unidades(float)
        self.rendimiento.valueChanged.connect(
            partial(self.changeParams, "rendimiento"))
        lyt_Calc.addWidget(self.rendimiento, 7, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Actual Power")),
            8, 1)
        self.trabajo = Entrada_con_unidades(Power)
        self.trabajo.valueChanged.connect(partial(self.changeParams,
                                                  "trabajo"))
        lyt_Calc.addWidget(self.trabajo, 8, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Stages")), 9, 1)
        self.etapas = Entrada_con_unidades(int,
                                           spinbox=True,
                                           min=1,
                                           value=1,
                                           step=1)
        self.etapas.valueChanged.connect(partial(self.changeParams, "etapas"))
        lyt_Calc.addWidget(self.etapas, 9, 2)
        lyt_Calc.setRowStretch(10, 1)

        group = QtWidgets.QGroupBox()
        group.setTitle(QtWidgets.QApplication.translate("pychemqt", "Results"))
        lyt_Calc.addWidget(group, 12, 1, 1, 2)
        lyt = QtWidgets.QGridLayout(group)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Power")), 1, 1)
        self.power = Entrada_con_unidades(Power, retornar=False, readOnly=True)
        lyt.addWidget(self.power, 1, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Cp/Cv ratio")),
            2, 1)
        self.cp_cv = Entrada_con_unidades(float, retornar=False, readOnly=True)
        lyt.addWidget(self.cp_cv, 2, 2)
        lyt.setColumnStretch(3, 1)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Pressure ratio")), 1, 4)
        self.razonCalculada = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.razonCalculada, 1, 5)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 2,
            4)
        self.rendimientoCalculado = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.rendimientoCalculado, 2, 5)

        # Cost tab
        lyt_Cost = QtWidgets.QGridLayout(self.tabCostos)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Compressor:")),
            1, 1)
        self.compresor = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_COMPRESOR:
            self.compresor.addItem(txt)
        self.compresor.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "compresor"))
        lyt_Cost.addWidget(self.compresor, 1, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Driver:")), 2, 1)
        self.transmision = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_TRANSMISION:
            self.transmision.addItem(txt)
        self.transmision.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "transmision"))
        lyt_Cost.addWidget(self.transmision, 2, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Motor:")), 3, 1)
        self.motor = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MOTOR:
            self.motor.addItem(txt)
        self.motor.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "motor"))
        lyt_Cost.addWidget(self.motor, 3, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "RPM:")), 4, 1)
        self.rpm = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_RPM:
            self.rpm.addItem(txt)
        self.rpm.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "rpm"))
        lyt_Cost.addWidget(self.rpm, 4, 2)
        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Maximum), 5, 1, 1, 6)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt_Cost.addWidget(self.Costos, 6, 1, 1, 3)

        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 8, 1, 1, 6)
        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 10, 1, 1,
            6)
        group = QtWidgets.QGroupBox()
        group.setTitle(
            QtWidgets.QApplication.translate("pychemqt", "Stimated Costs"))
        lyt_Cost.addWidget(group, 9, 1, 1, 5)
        lyt = QtWidgets.QGridLayout(group)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Compressor")), 0,
            0)
        self.C_comp = Entrada_con_unidades(Currency, retornar=False)
        self.C_comp.setReadOnly(True)
        lyt.addWidget(self.C_comp, 0, 1)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Drive")), 1, 0)
        self.C_trans = Entrada_con_unidades(Currency, retornar=False)
        self.C_trans.setReadOnly(True)
        lyt.addWidget(self.C_trans, 1, 1)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Motor")), 2, 0)
        self.C_motor = Entrada_con_unidades(Currency, retornar=False)
        self.C_motor.setReadOnly(True)
        lyt.addWidget(self.C_motor, 2, 1)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Purchase cost")),
            0, 4)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        lyt.addWidget(self.C_adq, 0, 5)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Installed cost")), 1, 4)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        lyt.addWidget(self.C_inst, 1, 5)

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

    def on_tipoCalculo_currentIndexChanged(self, int):
        """Enabled or disabled widget for data entry to calculate"""
        if int == 0:
            self.trabajo.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.Pout.setReadOnly(False)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(False)
        elif int == 1:
            self.Pout.setReadOnly(True)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(True)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(False)
        elif int == 2:
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(True)
        elif int == 3:
            self.rendimiento.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(False)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(True)
        elif int == 4:
            self.rendimiento.setReadOnly(True)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(True)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(False)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(True)
        else:
            self.rendimiento.setReadOnly(False)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(True)
        self.changeParams("metodo", int)

    def rellenar(self):
        UI_equip.rellenar(self)
        if self.Equipment.status == 1 and self.metodo.currentIndex() == 5:
            self.entrada.setCorriente(self.Equipment.entrada)
예제 #2
0
class UI_equipment(UI_equip):
    """Compressor equipment edition dialog"""
    Equipment = Compressor()

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

        # Calculate tab
        lyt_Calc = QtWidgets.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Method:")), 1, 1)
        self.metodo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_METODO:
            self.metodo.addItem(txt)
        # self.metodo.addItem(QtWidgets.QApplication.translate(
            # "pychemqt", "Especificar curva de funcionamiento"))
        self.metodo.currentIndexChanged.connect(
            self.on_tipoCalculo_currentIndexChanged)
        lyt_Calc.addWidget(self.metodo, 1, 2, 1, 2)
        lyt_Calc.addItem(QtWidgets.QSpacerItem(
            40, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            2, 0, 1, 4)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Thermodynamic:")), 3, 1)
        self.termodinamica = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_TERMODINAMICA:
            self.termodinamica.addItem(txt)
        self.termodinamica.currentIndexChanged.connect(
            partial(self.changeParams, "termodinamica"))
        lyt_Calc.addWidget(self.termodinamica, 3, 2, 1, 2)
        lyt_Calc.addItem(QtWidgets.QSpacerItem(
            40, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            4, 0, 1, 4)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Out Pressure")), 5, 1)
        self.Pout = Entrada_con_unidades(Pressure)
        self.Pout.valueChanged.connect(partial(self.changeParams, "Pout"))
        lyt_Calc.addWidget(self.Pout, 5, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Pressure ratio")), 6, 1)
        self.razon = Entrada_con_unidades(float)
        self.razon.valueChanged.connect(partial(self.changeParams, "razon"))
        lyt_Calc.addWidget(self.razon, 6, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Efficiency")), 7, 1)
        self.rendimiento = Entrada_con_unidades(float)
        self.rendimiento.valueChanged.connect(
            partial(self.changeParams, "rendimiento"))
        lyt_Calc.addWidget(self.rendimiento, 7, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Actual Power")), 8, 1)
        self.trabajo = Entrada_con_unidades(Power)
        self.trabajo.valueChanged.connect(
            partial(self.changeParams, "trabajo"))
        lyt_Calc.addWidget(self.trabajo, 8, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Stages")), 9, 1)
        self.etapas = Entrada_con_unidades(
            int, spinbox=True, min=1, value=1, step=1)
        self.etapas.valueChanged.connect(partial(self.changeParams, "etapas"))
        lyt_Calc.addWidget(self.etapas, 9, 2)
        lyt_Calc.setRowStretch(10, 1)

        group = QtWidgets.QGroupBox()
        group.setTitle(QtWidgets.QApplication.translate("pychemqt", "Results"))
        lyt_Calc.addWidget(group, 12, 1, 1, 2)
        lyt = QtWidgets.QGridLayout(group)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Power")), 1, 1)
        self.power = Entrada_con_unidades(Power, retornar=False, readOnly=True)
        lyt.addWidget(self.power, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Cp/Cv ratio")), 2, 1)
        self.cp_cv = Entrada_con_unidades(float, retornar=False, readOnly=True)
        lyt.addWidget(self.cp_cv, 2, 2)
        lyt.setColumnStretch(3, 1)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Pressure ratio")), 1, 4)
        self.razonCalculada = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.razonCalculada, 1, 5)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Efficiency")), 2, 4)
        self.rendimientoCalculado = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.rendimientoCalculado, 2, 5)

        # Cost tab
        lyt_Cost = QtWidgets.QGridLayout(self.tabCostos)
        lyt_Cost.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Compressor:")), 1, 1)
        self.compresor = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_COMPRESOR:
            self.compresor.addItem(txt)
        self.compresor.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "compresor"))
        lyt_Cost.addWidget(self.compresor, 1, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Driver:")), 2, 1)
        self.transmision = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_TRANSMISION:
            self.transmision.addItem(txt)
        self.transmision.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "transmision"))
        lyt_Cost.addWidget(self.transmision, 2, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Motor:")), 3, 1)
        self.motor = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MOTOR:
            self.motor.addItem(txt)
        self.motor.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "motor"))
        lyt_Cost.addWidget(self.motor, 3, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "RPM:")), 4, 1)
        self.rpm = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_RPM:
            self.rpm.addItem(txt)
        self.rpm.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "rpm"))
        lyt_Cost.addWidget(self.rpm, 4, 2)
        lyt_Cost.addItem(QtWidgets.QSpacerItem(
            40, 20, QtWidgets.QSizePolicy.Fixed,
            QtWidgets.QSizePolicy.Maximum), 5, 1, 1, 6)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt_Cost.addWidget(self.Costos, 6, 1, 1, 3)

        lyt_Cost.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 8, 1, 1, 6)
        lyt_Cost.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 10, 1, 1, 6)
        group = QtWidgets.QGroupBox()
        group.setTitle(
            QtWidgets.QApplication.translate("pychemqt", "Stimated Costs"))
        lyt_Cost.addWidget(group, 9, 1, 1, 5)
        lyt = QtWidgets.QGridLayout(group)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Compressor")), 0, 0)
        self.C_comp = Entrada_con_unidades(Currency, retornar=False)
        self.C_comp.setReadOnly(True)
        lyt.addWidget(self.C_comp, 0, 1)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Drive")), 1, 0)
        self.C_trans = Entrada_con_unidades(Currency, retornar=False)
        self.C_trans.setReadOnly(True)
        lyt.addWidget(self.C_trans, 1, 1)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Motor")), 2, 0)
        self.C_motor = Entrada_con_unidades(Currency, retornar=False)
        self.C_motor.setReadOnly(True)
        lyt.addWidget(self.C_motor, 2, 1)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Purchase cost")), 0, 4)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        lyt.addWidget(self.C_adq, 0, 5)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Installed cost")), 1, 4)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        lyt.addWidget(self.C_inst, 1, 5)

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

    def on_tipoCalculo_currentIndexChanged(self, int):
        """Enabled or disabled widget for data entry to calculate"""
        if int == 0:
            self.trabajo.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.Pout.setReadOnly(False)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(False)
        elif int == 1:
            self.Pout.setReadOnly(True)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(True)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(False)
        elif int == 2:
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(True)
        elif int == 3:
            self.rendimiento.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(False)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(True)
        elif int == 4:
            self.rendimiento.setReadOnly(True)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(True)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(False)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(True)
        else:
            self.rendimiento.setReadOnly(False)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(True)
        self.changeParams("metodo", int)

    def rellenar(self):
        UI_equip.rellenar(self)
        if self.Equipment.status == 1 and self.metodo.currentIndex() == 5:
            self.entrada.setCorriente(self.Equipment.entrada)
예제 #3
0
class UI_reacciones(QtWidgets.QDialog):
    reaction = reaction.Reaction()

    def __init__(self, reaccion=None, parent=None):
        super(UI_reacciones, self).__init__(parent)
        self.evaluate = Evaluate()
        self.evaluate.finished.connect(self.rellenar)
        self.indices, self.nombres, M = getComponents()
        gridLayout = QtWidgets.QGridLayout(self)

        lyt = QtWidgets.QHBoxLayout()
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Key component")))
        self.key = QtWidgets.QComboBox()
        for i, nombre in enumerate(self.nombres):
            self.key.addItem("%i - %s" % (i + 1, nombre))
        self.key.currentIndexChanged.connect(partial(self.changeParams, "key"))
        lyt.addWidget(self.key)
        lyt.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Fixed))
        gridLayout.addLayout(lyt, 1, 1, 1, 5)

        lyt = QtWidgets.QHBoxLayout()
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Phase")))
        self.fase = QtWidgets.QComboBox()
        for txt in reaction.Reaction.TEXT_PHASE:
            self.fase.addItem(txt)
        self.fase.currentIndexChanged.connect(
            partial(self.changeParams, "fase"))
        lyt.addWidget(self.fase)
        self.Formula = QtWidgets.QLabel()
        self.Formula.setAlignment(QtCore.Qt.AlignCenter)
        self.Formula.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                   QtWidgets.QSizePolicy.Fixed)
        lyt.addWidget(self.Formula)
        gridLayout.addLayout(lyt, 2, 1, 1, 5)

        lyt = QtWidgets.QVBoxLayout()
        title = self.nombres[:]
        title.append("")
        self.Estequiometria = Tabla(1,
                                    verticalHeaderLabels=title,
                                    horizontalHeader=[
                                        QtWidgets.QApplication.translate(
                                            "pychemqt", "Coefficients")
                                    ],
                                    filas=len(self.indices))
        self.Estequiometria.setFixedHeight(22 * len(self.indices) + 22 + 4 +
                                           22)
        lyt.addWidget(self.Estequiometria)
        self.Estequiometria.addRow()
        brush = QtGui.QBrush(QtGui.QColor("#eaeaea"))
        self.Estequiometria.item(len(self.indices), 0).setBackground(brush)
        self.Estequiometria.item(len(self.indices),
                                 0).setFlags(QtCore.Qt.NoItemFlags)
        self.Estequiometria.cellChanged.connect(self.reaccionCambiada)
        lyt.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Expanding))
        gridLayout.addLayout(lyt, 3, 1, 1, 2)

        lyt = QtWidgets.QGridLayout()
        lyt.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 1, 1)
        self.formula = QtWidgets.QCheckBox(
            QtWidgets.QApplication.translate("pychemqt",
                                             "Use name in formula"))
        self.formula.toggled.connect(partial(self.changeParams, "formula"))
        lyt.addWidget(self.formula, 1, 2, 1, 2)
        self.customHr = QtWidgets.QCheckBox(
            "ΔHr " +
            QtWidgets.QApplication.translate("pychemqt", "user specified"))
        self.customHr.toggled.connect(self.changeHr)
        lyt.addWidget(self.customHr, 2, 2, 1, 2)
        lyt.addWidget(QtWidgets.QLabel("ΔHr<sup>o</sup>"), 3, 2)
        self.Hr = Entrada_con_unidades(unidades.MolarEnthalpy, readOnly=True)
        self.Hr.valueChanged.connect(partial(self.changeParams, "Hr"))
        lyt.addWidget(self.Hr, 3, 3)
        lyt.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Expanding))
        gridLayout.addLayout(lyt, 3, 3, 1, 2)

        gridLayout.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 4, 2)

        lyt = QtWidgets.QHBoxLayout()
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Type")))
        self.tipo = QtWidgets.QComboBox()
        for txt in reaction.Reaction.TEXT_TYPE:
            self.tipo.addItem(txt)
        self.tipo.currentIndexChanged.connect(
            partial(self.changeParams, "tipo"))
        lyt.addWidget(self.tipo)
        lyt.addItem(
            QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed))
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Concentration")))
        self.base = QtWidgets.QComboBox()
        for txt in reaction.Reaction.TEXT_BASE:
            self.base.addItem(txt)
        self.base.currentIndexChanged.connect(
            partial(self.changeParams, "base"))
        lyt.addWidget(self.base)
        lyt.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Fixed))
        gridLayout.addLayout(lyt, 5, 1, 1, 5)

        self.stacked = QtWidgets.QStackedWidget()
        self.tipo.currentIndexChanged.connect(self.stacked.setCurrentIndex)
        gridLayout.addWidget(self.stacked, 6, 1, 1, 5)
        gridLayout.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 7, 1, 1, 5)

        widget = QtWidgets.QWidget()
        self.stacked.addWidget(widget)
        lyt = QtWidgets.QGridLayout(widget)
        lyt.addWidget(
            QtWidgets.QLabel("<h3>" + QtWidgets.QApplication.translate(
                "pychemqt", "Estequiometric reaction") + "</h3>"), 1, 1, 1, 4)
        self.Conversion = Tabla(1, verticalHeaderModel="C", filas=3)
        self.Conversion.setConnected()
        self.Conversion.setFixedWidth(100)
        lyt.addWidget(self.Conversion, 2, 1, 3, 1)
        label = QtWidgets.QLabel()
        label.setPixmap(
            QtGui.QPixmap(os.environ["pychemqt"] +
                          "/images/equation/reaction_conversion.png"))
        lyt.addWidget(label, 2, 2, 1, 3)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Temperature unit")), 3, 2)
        self.unidadesTemperatura = QtWidgets.QComboBox()
        for i in unidades.Temperature.__text__:
            self.unidadesTemperatura.addItem(i)
        lyt.addWidget(self.unidadesTemperatura, 3, 3)
        lyt.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 4, 4)
        lyt.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 5, 1, 1, 5)

        widget = QtWidgets.QWidget()
        self.stacked.addWidget(widget)
        lyt = QtWidgets.QGridLayout(widget)
        self.check_KFijo = QtWidgets.QRadioButton(
            QtWidgets.QApplication.translate("pychemqt", "Fixed"))
        self.check_KFijo.toggled.connect(self.KeqChanged)
        lyt.addWidget(self.check_KFijo, 1, 1, 1, 2)
        lyt.addWidget(QtWidgets.QLabel("K<sub>eq</sub>"), 1, 3)
        self.Keq = Entrada_con_unidades(float)
        lyt.addWidget(self.Keq, 1, 4)
        label = QtWidgets.QLabel()
        label.setPixmap(
            QtGui.QPixmap(os.environ["pychemqt"] +
                          "/images/equation/reaction_equilibrium.png"))
        lyt.addWidget(label, 1, 5, 1, 4)

        self.check_KEq = QtWidgets.QRadioButton(
            QtWidgets.QApplication.translate("pychemqt", "Equation"))
        self.check_KEq.toggled.connect(self.KeqChanged)
        lyt.addWidget(self.check_KEq, 2, 1, 1, 2)
        self.check_KTabla = QtWidgets.QRadioButton(
            QtWidgets.QApplication.translate("pychemqt", "Table"))
        self.check_KTabla.toggled.connect(self.KeqChanged)
        lyt.addWidget(self.check_KTabla, 2, 5, 1, 2)
        self.KEq_Dat = Tabla(
            1,
            verticalHeaderLabels=["A", "B", "C", "D", "E", "F", "G", "H"],
            filas=8)
        self.KEq_Dat.setFixedHeight(22 * 8 + 4)
        self.KEq_Dat.setFixedWidth(120)
        lyt.addWidget(self.KEq_Dat, 3, 3, 1, 2)
        self.KEq_Tab = Tabla(
            4,
            horizontalHeader=["T, K", "Keq", "Kcalc", "%Error"],
            verticalHeader=False,
            columnReadOnly=[False, False, True, True])
        self.KEq_Tab.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                   QtWidgets.QSizePolicy.Expanding)
        self.KEq_Tab.setFixedWidth(400)
        self.KEq_Tab.setConnected()
        self.KEq_Tab.rowFinished.connect(self.Regresion)
        self.KEq_Tab.setAlternatingRowColors(False)
        lyt.addWidget(self.KEq_Tab, 3, 5, 1, 4)
        lyt.addWidget(QtWidgets.QLabel("r²"), 4, 5)
        self.r2 = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.r2, 4, 6)
        self.botonTablaPlot = QtWidgets.QPushButton(
            QtGui.QIcon(
                QtGui.QPixmap(os.environ["pychemqt"] +
                              "/images/button/plot.png")),
            QtWidgets.QApplication.translate("pychemqt", "Plot"))
        self.botonTablaPlot.clicked.connect(self.Plot)
        lyt.addWidget(self.botonTablaPlot, 4, 7)
        self.botonTablaClear = QtWidgets.QPushButton(
            QtGui.QIcon(
                QtGui.QPixmap(os.environ["pychemqt"] +
                              "/images/button/clear.png")),
            QtWidgets.QApplication.translate("pychemqt", "Clear"))
        self.botonTablaClear.clicked.connect(self.KEq_Tab.clear)
        lyt.addWidget(self.botonTablaClear, 4, 8)
        label = QtWidgets.QLabel()
        label.setPixmap(
            QtGui.QPixmap(os.environ["pychemqt"] +
                          "/images/equation/reaction_equilibrium2.png"))
        label.setAlignment(QtCore.Qt.AlignCenter)
        lyt.addWidget(label, 5, 1, 1, 8)

        self.checkGibbs = QtWidgets.QRadioButton(
            QtWidgets.QApplication.translate(
                "pychemqt", "From Gibbs free energy minimization"))
        lyt.addWidget(self.checkGibbs, 6, 1, 1, 4)

        self.check_KFijo.setChecked(True)

        widget = QtWidgets.QWidget()
        self.stacked.addWidget(widget)
        lyt = QtWidgets.QGridLayout(widget)

        widget = QtWidgets.QWidget()
        self.stacked.addWidget(widget)
        lyt = QtWidgets.QGridLayout(widget)

        self.status = Status()
        gridLayout.addWidget(self.status, 10, 1)
        self.buttonBox = QtWidgets.QDialogButtonBox(
            QtWidgets.QDialogButtonBox.Cancel | QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)
        gridLayout.addWidget(self.buttonBox, 10, 2, 1, 4)

        if reaccion:
            self.setReaction(reaccion)

    def changeParams(self, parametro, valor):
        self.calculo(**{parametro: valor})

    def calculo(self, **kwargs):
        self.status.setState(4)
        self.evaluate.start(self.reaction, kwargs)

    def changeHr(self, bool):
        self.Hr.setReadOnly(not bool)
        self.changeParams("customHr", bool)

    def reaccionCambiada(self):
        kwargs = {
            "componentes": self.indices,
            "coeficientes": self.Estequiometria.getColumn(0)[:-1]
        }
        self.calculo(**kwargs)

    def setReaction(self, reaction):
        self.reaction = reaction
        self.rellenar()


#        if self.Estequiometria.getValue(0, self.Base.currentIndex()):
#            reaccion=reaction.Reaction(self.indices, self.Estequiometria.getColumn(0), base=self.Base.currentIndex(), estequiometria=[0, 0, 0.5], formulas=self.checkFormula.isChecked(), calor=self.checkCalorEspecificado.isChecked(), Hr=self.Hr.value, tipo=self.tipo.currentIndex(), conversion=self.Conversion.getColumn(0)[-1::-1])
#            self.Balance.setValue(reaccion.error)
#            if reaccion.state:
#                self.Formula.setText(reaccion._txt(self.checkFormula.isChecked()))
#                self.Hr.setValue(reaccion.Hr)
#            else:
#                self.Formula.clear()
#                self.Hr.clear()
#            self.botonAdd.setEnabled(reaccion.state and not self.botonEdit.isChecked())
#            self.reaccion=reaccion

    def rellenar(self):
        self.blockSignals(True)
        for variable in self.reaction.kwargsValue:
            self.__getattribute__(variable).setValue(
                self.reaction.kwargs[variable])
        for combo in self.reaction.kwargsList:
            self.__getattribute__(combo).setCurrentIndex(
                self.reaction.kwargs[combo])
        for check in self.reaction.kwargsCheck:
            self.__getattribute__(check).setChecked(
                self.reaction.kwargs[check])

        self.Estequiometria.setColumn(0, self.reaction.kwargs["coeficientes"])
        #        self.Conversion.setColumn(0, self.reaction.estequiometria[-1::-1])
        self.blockSignals(False)

        self.status.setState(self.reaction.status, self.reaction.msg)
        self.Estequiometria.item(len(self.indices),
                                 0).setText(str(self.reaction.error))
        if self.reaction.status:
            self.Formula.setText(self.reaction._txt())
            self.Hr.setValue(self.reaction.Hr)

    def KeqChanged(self):
        self.Keq.setReadOnly(not self.check_KFijo.isChecked())
        self.KEq_Dat.setEnabled(self.check_KEq.isChecked())
        self.KEq_Tab.setEnabled(self.check_KTabla.isChecked())
        self.botonTablaClear.setEnabled(self.check_KTabla.isChecked())
        self.botonTablaPlot.setEnabled(self.check_KTabla.isChecked())

    def Regresion(self):
        t = array(self.KEq_Tab.getColumn(0)[:-1])
        k = array(self.KEq_Tab.getColumn(1)[:-1])
        if len(t) >= 4:
            if 4 <= len(t) < 8:
                inicio = r_[0, 0, 0, 0]
                f = lambda par, T: exp(par[0] + par[1] / T + par[2] * log(T) +
                                       par[3] * T)
                resto = lambda par, T, k: k - f(par, T)
            else:
                inicio = r_[0, 0, 0, 0, 0, 0, 0, 0]
                f = lambda par, T: exp(par[0] + par[1] / T + par[2] * log(
                    T) + par[3] * T + par[4] * T**2 + par[5] * T**3 + par[6] *
                                       T**4 + par[7] * T**5)
                resto = lambda par, T, k: k - f(par, T)

            ajuste = leastsq(resto, inicio, args=(t, k))
            kcalc = f(ajuste[0], t)
            error = (k - kcalc) / k * 100
            self.KEq_Dat.setColumn(0, ajuste[0])
            self.KEq_Tab.setColumn(2, kcalc)
            self.KEq_Tab.setColumn(3, error)

            if ajuste[1] in [1, 2, 3, 4]:
                self.ajuste = ajuste[0]

    def Plot(self):
        if self.ajuste != None:
            t = array(self.KEq_Tab.getColumn(0)[:-1])
            k = array(self.KEq_Tab.getColumn(1)[:-1])
            if 4 <= len(t) < 8:
                f = lambda par, T: exp(par[0] + par[1] / T + par[2] * log(T) +
                                       par[3] * T)
            else:
                f = lambda par, T: exp(par[0] + par[1] / T + par[2] * log(
                    T) + par[3] * T + par[4] * T**2 + par[5] * T**3 + par[6] *
                                       T**4 + par[7] * T**5)

            grafico = plot.Plot()
            grafico.data(t, k, 'ro', t, f(self.ajuste, t))
            grafico.exec_()
예제 #4
0
class UI_reacciones(QtWidgets.QDialog):
    reaction=reaction.Reaction()
    def __init__(self, reaccion=None, parent=None):
        super(UI_reacciones, self).__init__(parent)
        self.evaluate=Evaluate()
        self.evaluate.finished.connect(self.rellenar)
        self.indices, self.nombres, M=getComponents()
        gridLayout = QtWidgets.QGridLayout(self)

        lyt=QtWidgets.QHBoxLayout()
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Key component")))
        self.key=QtWidgets.QComboBox()
        for i, nombre in enumerate(self.nombres):
            self.key.addItem("%i - %s" %(i+1, nombre))
        self.key.currentIndexChanged.connect(partial(self.changeParams, "key"))
        lyt.addWidget(self.key)
        lyt.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Fixed))
        gridLayout.addLayout(lyt,1,1,1,5)

        lyt=QtWidgets.QHBoxLayout()
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Phase")))
        self.fase=QtWidgets.QComboBox()
        for txt in reaction.Reaction.TEXT_PHASE:
            self.fase.addItem(txt)
        self.fase.currentIndexChanged.connect(partial(self.changeParams, "fase"))
        lyt.addWidget(self.fase)
        self.Formula=QtWidgets.QLabel()
        self.Formula.setAlignment(QtCore.Qt.AlignCenter)
        self.Formula.setSizePolicy(QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Fixed)
        lyt.addWidget(self.Formula)
        gridLayout.addLayout(lyt,2,1,1,5)

        lyt=QtWidgets.QVBoxLayout()
        title=self.nombres[:]
        title.append("")
        self.Estequiometria=Tabla(1, verticalHeaderLabels=title, horizontalHeader=[QtWidgets.QApplication.translate("pychemqt", "Coefficients")], filas=len(self.indices))
        self.Estequiometria.setFixedHeight(22*len(self.indices)+22+4+22)
        lyt.addWidget(self.Estequiometria)
        self.Estequiometria.addRow()
        brush=QtGui.QBrush(QtGui.QColor("#eaeaea"))
        self.Estequiometria.item(len(self.indices), 0).setBackground(brush)
        self.Estequiometria.item(len(self.indices), 0).setFlags(QtCore.Qt.NoItemFlags)
        self.Estequiometria.cellChanged.connect(self.reaccionCambiada)
        lyt.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Expanding))
        gridLayout.addLayout(lyt,3,1,1,2)

        lyt=QtWidgets.QGridLayout()
        lyt.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Fixed),1,1)
        self.formula=QtWidgets.QCheckBox(QtWidgets.QApplication.translate("pychemqt", "Use name in formula"))
        self.formula.toggled.connect(partial(self.changeParams, "formula"))
        lyt.addWidget(self.formula,1,2,1,2)
        self.customHr=QtWidgets.QCheckBox("ΔHr "+QtWidgets.QApplication.translate("pychemqt", "user specified"))
        self.customHr.toggled.connect(self.changeHr)
        lyt.addWidget(self.customHr,2,2,1,2)
        lyt.addWidget(QtWidgets.QLabel("ΔHr<sup>o</sup>"),3,2)
        self.Hr=Entrada_con_unidades(unidades.MolarEnthalpy, readOnly=True)
        self.Hr.valueChanged.connect(partial(self.changeParams, "Hr"))
        lyt.addWidget(self.Hr,3,3)
        lyt.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Expanding))
        gridLayout.addLayout(lyt,3,3,1,2)

        gridLayout.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Fixed),4,2)

        lyt=QtWidgets.QHBoxLayout()
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Type")))
        self.tipo=QtWidgets.QComboBox()
        for txt in reaction.Reaction.TEXT_TYPE:
            self.tipo.addItem(txt)
        self.tipo.currentIndexChanged.connect(partial(self.changeParams, "tipo"))
        lyt.addWidget(self.tipo)
        lyt.addItem(QtWidgets.QSpacerItem(20,10,QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Fixed))
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Concentration")))
        self.base=QtWidgets.QComboBox()
        for txt in reaction.Reaction.TEXT_BASE:
            self.base.addItem(txt)
        self.base.currentIndexChanged.connect(partial(self.changeParams, "base"))
        lyt.addWidget(self.base)
        lyt.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Fixed))
        gridLayout.addLayout(lyt,5,1,1,5)

        self.stacked = QtWidgets.QStackedWidget()
        self.tipo.currentIndexChanged.connect(self.stacked.setCurrentIndex)
        gridLayout.addWidget(self.stacked,6,1,1,5)
        gridLayout.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding),7,1,1,5)

        widget=QtWidgets.QWidget()
        self.stacked.addWidget(widget)
        lyt=QtWidgets.QGridLayout(widget)
        lyt.addWidget(QtWidgets.QLabel("<h3>"+QtWidgets.QApplication.translate("pychemqt", "Estequiometric reaction")+"</h3>"),1,1,1,4)
        self.Conversion=Tabla(1, verticalHeaderModel="C", filas=3)
        self.Conversion.setConnected()
        self.Conversion.setFixedWidth(100)
        lyt.addWidget(self.Conversion,2,1,3,1)
        label=QtWidgets.QLabel()
        label.setPixmap(QtGui.QPixmap(os.environ["pychemqt"]+"/images/equation/reaction_conversion.png"))
        lyt.addWidget(label,2,2,1,3)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Temperature unit")),3,2)
        self.unidadesTemperatura=QtWidgets.QComboBox()
        for i in unidades.Temperature.__text__:
            self.unidadesTemperatura.addItem(i)
        lyt.addWidget(self.unidadesTemperatura,3,3)
        lyt.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding),4,4)
        lyt.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding),5,1,1,5)


        widget=QtWidgets.QWidget()
        self.stacked.addWidget(widget)
        lyt=QtWidgets.QGridLayout(widget)
        self.check_KFijo=QtWidgets.QRadioButton(QtWidgets.QApplication.translate("pychemqt", "Fixed"))
        self.check_KFijo.toggled.connect(self.KeqChanged)
        lyt.addWidget(self.check_KFijo,1,1,1,2)
        lyt.addWidget(QtWidgets.QLabel("K<sub>eq</sub>"),1,3)
        self.Keq=Entrada_con_unidades(float)
        lyt.addWidget(self.Keq,1,4)
        label=QtWidgets.QLabel()
        label.setPixmap(QtGui.QPixmap(os.environ["pychemqt"]+"/images/equation/reaction_equilibrium.png"))
        lyt.addWidget(label,1,5,1,4)

        self.check_KEq=QtWidgets.QRadioButton(QtWidgets.QApplication.translate("pychemqt", "Equation"))
        self.check_KEq.toggled.connect(self.KeqChanged)
        lyt.addWidget(self.check_KEq,2,1,1,2)
        self.check_KTabla=QtWidgets.QRadioButton(QtWidgets.QApplication.translate("pychemqt", "Table"))
        self.check_KTabla.toggled.connect(self.KeqChanged)
        lyt.addWidget(self.check_KTabla,2,5,1,2)
        self.KEq_Dat=Tabla(1, verticalHeaderLabels=["A", "B", "C", "D", "E", "F", "G", "H"], filas=8)
        self.KEq_Dat.setFixedHeight(22*8+4)
        self.KEq_Dat.setFixedWidth(120)
        lyt.addWidget(self.KEq_Dat,3,3,1,2)
        self.KEq_Tab=Tabla(4, horizontalHeader=["T, K", "Keq", "Kcalc", "%Error"], verticalHeader=False, columnReadOnly=[False, False, True, True])
        self.KEq_Tab.setSizePolicy(QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding)
        self.KEq_Tab.setFixedWidth(400)
        self.KEq_Tab.setConnected()
        self.KEq_Tab.rowFinished.connect(self.Regresion)
        self.KEq_Tab.setAlternatingRowColors(False)
        lyt.addWidget(self.KEq_Tab,3,5,1,4)
        lyt.addWidget(QtWidgets.QLabel("r²"),4,5)
        self.r2=Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.r2,4,6)
        self.botonTablaPlot=QtWidgets.QPushButton(QtGui.QIcon(QtGui.QPixmap(os.environ["pychemqt"]+"/images/button/plot.png")), QtWidgets.QApplication.translate("pychemqt", "Plot"))
        self.botonTablaPlot.clicked.connect(self.Plot)
        lyt.addWidget(self.botonTablaPlot,4,7)
        self.botonTablaClear=QtWidgets.QPushButton(QtGui.QIcon(QtGui.QPixmap(os.environ["pychemqt"]+"/images/button/clear.png")), QtWidgets.QApplication.translate("pychemqt", "Clear"))
        self.botonTablaClear.clicked.connect(self.KEq_Tab.clear)
        lyt.addWidget(self.botonTablaClear,4,8)
        label=QtWidgets.QLabel()
        label.setPixmap(QtGui.QPixmap(os.environ["pychemqt"]+"/images/equation/reaction_equilibrium2.png"))
        label.setAlignment(QtCore.Qt.AlignCenter)
        lyt.addWidget(label,5,1,1,8)


        self.checkGibbs=QtWidgets.QRadioButton(QtWidgets.QApplication.translate("pychemqt", "From Gibbs free energy minimization"))
        lyt.addWidget(self.checkGibbs,6,1,1,4)

        self.check_KFijo.setChecked(True)


        widget=QtWidgets.QWidget()
        self.stacked.addWidget(widget)
        lyt=QtWidgets.QGridLayout(widget)

        widget=QtWidgets.QWidget()
        self.stacked.addWidget(widget)
        lyt=QtWidgets.QGridLayout(widget)

        self.status=Status()
        gridLayout.addWidget(self.status, 10,1)
        self.buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)
        gridLayout.addWidget(self.buttonBox,10,2,1,4)

        if reaccion:
            self.setReaction(reaccion)

    def changeParams(self, parametro, valor):
        self.calculo(**{parametro: valor})

    def calculo(self, **kwargs):
        self.status.setState(4)
        self.evaluate.start(self.reaction, kwargs)

    def changeHr(self, bool):
        self.Hr.setReadOnly(not bool)
        self.changeParams("customHr", bool)

    def reaccionCambiada(self):
        kwargs={"componentes": self.indices,
                    "coeficientes": self.Estequiometria.getColumn(0)[:-1]}
        self.calculo(**kwargs)

    def setReaction(self, reaction):
        self.reaction=reaction
        self.rellenar()

#        if self.Estequiometria.getValue(0, self.Base.currentIndex()):
#            reaccion=reaction.Reaction(self.indices, self.Estequiometria.getColumn(0), base=self.Base.currentIndex(), estequiometria=[0, 0, 0.5], formulas=self.checkFormula.isChecked(), calor=self.checkCalorEspecificado.isChecked(), Hr=self.Hr.value, tipo=self.tipo.currentIndex(), conversion=self.Conversion.getColumn(0)[-1::-1])
#            self.Balance.setValue(reaccion.error)
#            if reaccion.state:
#                self.Formula.setText(reaccion._txt(self.checkFormula.isChecked()))
#                self.Hr.setValue(reaccion.Hr)
#            else:
#                self.Formula.clear()
#                self.Hr.clear()
#            self.botonAdd.setEnabled(reaccion.state and not self.botonEdit.isChecked())
#            self.reaccion=reaccion

    def rellenar(self):
        self.blockSignals(True)
        for variable in self.reaction.kwargsValue:
            self.__getattribute__(variable).setValue(self.reaction.kwargs[variable])
        for combo in self.reaction.kwargsList:
            self.__getattribute__(combo).setCurrentIndex(self.reaction.kwargs[combo])
        for check in self.reaction.kwargsCheck:
            self.__getattribute__(check).setChecked(self.reaction.kwargs[check])

        self.Estequiometria.setColumn(0, self.reaction.kwargs["coeficientes"])
#        self.Conversion.setColumn(0, self.reaction.estequiometria[-1::-1])
        self.blockSignals(False)

        self.status.setState(self.reaction.status, self.reaction.msg)
        self.Estequiometria.item(len(self.indices), 0).setText(str(self.reaction.error))
        if self.reaction.status:
            self.Formula.setText(self.reaction._txt())
            self.Hr.setValue(self.reaction.Hr)

    def KeqChanged(self):
        self.Keq.setReadOnly(not self.check_KFijo.isChecked())
        self.KEq_Dat.setEnabled(self.check_KEq.isChecked())
        self.KEq_Tab.setEnabled(self.check_KTabla.isChecked())
        self.botonTablaClear.setEnabled(self.check_KTabla.isChecked())
        self.botonTablaPlot.setEnabled(self.check_KTabla.isChecked())

    def Regresion(self):
        t=array(self.KEq_Tab.getColumn(0)[:-1])
        k=array(self.KEq_Tab.getColumn(1)[:-1])
        if len(t)>=4:
            if 4<=len(t)<8:
                inicio=r_[0, 0, 0, 0]
                f=lambda par, T: exp(par[0]+par[1]/T+par[2]*log(T)+par[3]*T)
                resto=lambda par, T, k: k-f(par, T)
            else:
                inicio=r_[0, 0, 0, 0, 0, 0, 0, 0]
                f=lambda par, T: exp(par[0]+par[1]/T+par[2]*log(T)+par[3]*T+par[4]*T**2+par[5]*T**3+par[6]*T**4+par[7]*T**5)
                resto=lambda par, T, k: k-f(par, T)

            ajuste=leastsq(resto,inicio,args=(t, k))
            kcalc=f(ajuste[0], t)
            error=(k-kcalc)/k*100
            self.KEq_Dat.setColumn(0, ajuste[0])
            self.KEq_Tab.setColumn(2, kcalc)
            self.KEq_Tab.setColumn(3, error)

            if ajuste[1] in [1, 2, 3, 4]:
                self.ajuste=ajuste[0]

    def Plot(self):
        if self.ajuste!=None:
            t=array(self.KEq_Tab.getColumn(0)[:-1])
            k=array(self.KEq_Tab.getColumn(1)[:-1])
            if 4<=len(t)<8:
                f=lambda par, T: exp(par[0]+par[1]/T+par[2]*log(T)+par[3]*T)
            else:
                f=lambda par, T: exp(par[0]+par[1]/T+par[2]*log(T)+par[3]*T+par[4]*T**2+par[5]*T**3+par[6]*T**4+par[7]*T**5)

            grafico=plot.Plot()
            grafico.data(t, k, 'ro', t, f(self.ajuste, t))
            grafico.exec_()
예제 #5
0
class UI_equipment(UI_equip):
    Equipment = Scrubber()
    """Scrubber equipment definition dialog"""
    def __init__(self, equipment=None, parent=None):
        """
        equipment: Initial equipment instance to model
        """
        super().__init__(Scrubber, parent=parent)

        # Input tab
        self.entradaGas = UI_corriente.Ui_corriente(psychro=True)
        self.entradaGas.Changed.connect(
            partial(self.changeParams, "entradaGas"))
        self.Entrada.addTab(
            self.entradaGas,
            QtWidgets.QApplication.translate("equipment", "Gas"))
        self.entradaLiquido = UI_corriente.Ui_corriente()
        self.entradaLiquido.Changed.connect(
            partial(self.changeParams, "entradaLiquido"))
        self.Entrada.addTab(
            self.entradaLiquido,
            QtWidgets.QApplication.translate("pychemqt", "Liquid"))

        # Calculate tab
        gridLayout_Calculo = QtWidgets.QGridLayout(self.tabCalculo)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Mode")), 1, 1)
        self.tipo_calculo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_TIPO:
            self.tipo_calculo.addItem(txt)
        self.tipo_calculo.currentIndexChanged.connect(
            self.on_tipoCalculo_currentIndexChanged)
        gridLayout_Calculo.addWidget(self.tipo_calculo, 1, 2, 1, 5)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Method")), 2, 1)
        self.modelo_rendimiento = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MODEL:
            self.modelo_rendimiento.addItem(txt)
        self.modelo_rendimiento.currentIndexChanged.connect(
            self.on_modeloRendimiento_currentIndexChanged)
        gridLayout_Calculo.addWidget(self.modelo_rendimiento, 2, 2, 1, 5)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "ΔP method")), 3,
            1)
        self.modelo_DeltaP = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MODEL_DELTAP:
            self.modelo_DeltaP.addItem(txt)
        self.modelo_DeltaP.currentIndexChanged.connect(
            self.on_modeloDeltaP_currentIndexChanged)
        gridLayout_Calculo.addWidget(self.modelo_DeltaP, 3, 2, 1, 5)

        gridLayout_Calculo.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 4, 1, 1, 6)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Diameter")), 5,
            1)
        self.diametro = Entrada_con_unidades(Length)
        self.diametro.valueChanged.connect(
            partial(self.changeParams, "diametro"))
        gridLayout_Calculo.addWidget(self.diametro, 5, 2)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 6,
            1)
        self.rendimientoAdmisible = Entrada_con_unidades(float, spinbox=True)
        self.rendimientoAdmisible.valueChanged.connect(
            partial(self.changeParams, "rendimientoAdmisible"))
        gridLayout_Calculo.addWidget(self.rendimientoAdmisible, 6, 2)

        self.groupJohnstone = QtWidgets.QWidget()
        gridLayout_Calculo.addWidget(self.groupJohnstone, 7, 1, 1, 2)
        JohnstoneLayout = QtWidgets.QHBoxLayout(self.groupJohnstone)
        JohnstoneLayout.setSpacing(0)
        JohnstoneLayout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Ventury Constant")))
        self.k = Entrada_con_unidades(float, spinbox=True)
        self.k.valueChanged.connect(partial(self.changeParams, "k"))
        JohnstoneLayout.addWidget(self.k)

        self.groupCalvert = QtWidgets.QWidget()
        gridLayout_Calculo.addWidget(self.groupCalvert, 7, 1, 1, 2)
        CalvertLayout = QtWidgets.QHBoxLayout(self.groupCalvert)
        CalvertLayout.setSpacing(0)
        CalvertLayout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "f parameter")))
        self.f = Entrada_con_unidades(float, spinbox=True)
        self.f.valueChanged.connect(partial(self.changeParams, "f"))
        CalvertLayout.addWidget(self.f)

        self.groupLt = QtWidgets.QWidget()
        gridLayout_Calculo.addWidget(self.groupLt, 5, 4, 1, 2)
        LtLayout = QtWidgets.QHBoxLayout(self.groupLt)
        LtLayout.setSpacing(0)
        LtLayout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Length throat")))
        self.Lt = Entrada_con_unidades(Length)
        self.Lt.valueChanged.connect(partial(self.changeParams, "Lt"))
        LtLayout.addWidget(self.Lt)

        gridLayout_Calculo.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 8, 1, 1, 6)
        self.groupBox_Calculo = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        gridLayout_Calculo.addWidget(self.groupBox_Calculo, 9, 1, 1, 5)
        gridLayout_1 = QtWidgets.QGridLayout(self.groupBox_Calculo)
        gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 1,
            1)
        self.rendimiento = Entrada_con_unidades(float,
                                                retornar=False,
                                                readOnly=True)
        gridLayout_1.addWidget(self.rendimiento, 1, 2)
        gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "DeltaP")), 2, 1)
        self.deltaP = Entrada_con_unidades(DeltaP,
                                           retornar=False,
                                           readOnly=True)
        gridLayout_1.addWidget(self.deltaP, 2, 2)

        gridLayout_Calculo.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 11, 1, 1,
            6)

        # Output Tab
        self.SalidaGas = UI_corriente.Ui_corriente(readOnly=True, psychro=True)
        self.Salida.addTab(
            self.SalidaGas,
            QtWidgets.QApplication.translate("pychemqt", "Clean Gas"))
        self.SalidaLiquido = UI_corriente.Ui_corriente(readOnly=True)
        self.Salida.addTab(
            self.SalidaLiquido,
            QtWidgets.QApplication.translate("pychemqt", "Liquid"))

        self.on_tipoCalculo_currentIndexChanged(0)
        self.on_modeloRendimiento_currentIndexChanged(0)
        self.on_modeloDeltaP_currentIndexChanged(0)
        if equipment:
            self.setEquipment(equipment)

    def on_tipoCalculo_currentIndexChanged(self, modelo):
        self.rendimientoAdmisible.setEnabled(modelo)
        self.rendimientoAdmisible.setReadOnly(not modelo)
        self.diametro.setEnabled(not modelo)
        self.diametro.setReadOnly(modelo)
        self.changeParams("tipo_calculo", modelo)

    def on_modeloRendimiento_currentIndexChanged(self, modelo):
        self.groupJohnstone.setVisible(False)
        self.groupCalvert.setVisible(False)
        if modelo == 0:
            self.groupJohnstone.setVisible(True)
        elif modelo == 1:
            self.groupCalvert.setVisible(True)
        self.changeParams("modelo_rendimiento", modelo)

    def on_modeloDeltaP_currentIndexChanged(self, modelo):
        self.groupLt.setVisible(False)
        if modelo in (3, 4):
            self.groupLt.setVisible(True)
        self.changeParams("modelo_DeltaP", modelo)
예제 #6
0
파일: petro.py 프로젝트: puttak/CheProcess
class View_Petro(QtWidgets.QDialog):
    """Dialog to show the properties of a petroleum fractions"""

    def __init__(self, petroleo=None, parent=None):
        super(View_Petro, self).__init__(parent)
        self.setWindowTitle(QtWidgets.QApplication.translate(
            "pychemqt", "Petrol assay characteristics"))
        layout = QtWidgets.QGridLayout(self)
        self.nombre = QtWidgets.QLabel()
        layout.addWidget(self.nombre, 1, 1, 1, 5)
        label = QtWidgets.QLabel("M")
        label.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt", "Molecular Weight"))
        layout.addWidget(label, 2, 1)
        self.M = Entrada_con_unidades(float, textounidad="g/mol")
        layout.addWidget(self.M, 2, 2)
        label = QtWidgets.QLabel("Tb")
        label.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt", "Boiling Temperature"))
        layout.addWidget(label, 3, 1)
        self.Tb = Entrada_con_unidades(unidades.Temperature)
        layout.addWidget(self.Tb, 3, 2)
        label = QtWidgets.QLabel("SG")
        label.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt", "Specific gravity at 60ºF"))
        layout.addWidget(label, 4, 1)
        self.gravity = Entrada_con_unidades(float)
        layout.addWidget(self.gravity, 4, 2)
        label = QtWidgets.QLabel("API")
        label.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt", "API Specific gravity"))
        layout.addWidget(label, 5, 1)
        self.API = Entrada_con_unidades(float)
        layout.addWidget(self.API, 5, 2)
        label = QtWidgets.QLabel("Kw")
        label.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt", "Watson characterization factor"))
        layout.addWidget(label, 6, 1)
        self.watson = Entrada_con_unidades(float)
        layout.addWidget(self.watson, 6, 2)
        label = QtWidgets.QLabel("n")
        label.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt", "Refractive Index"))
        layout.addWidget(label, 7, 1)
        self.n = Entrada_con_unidades(float)
        layout.addWidget(self.n, 7, 2)
        label = QtWidgets.QLabel("I")
        label.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt", "Huang parameter"))
        layout.addWidget(label, 8, 1)
        self.I = Entrada_con_unidades(float)
        layout.addWidget(self.I, 8, 2)
        label = QtWidgets.QLabel("ν<sub>100F</sub>")
        label.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt", "Kinematic viscosity at 100ºF"))
        layout.addWidget(label, 9, 1)
        self.v100 = Entrada_con_unidades(unidades.Diffusivity)
        layout.addWidget(self.v100, 9, 2)
        label = QtWidgets.QLabel("ν<sub>210F</sub>")
        label.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt", "Kinematic viscosity at 210ºF"))
        layout.addWidget(label, 10, 1)
        self.v210 = Entrada_con_unidades(unidades.Diffusivity)
        layout.addWidget(self.v210, 10, 2)

        layout.addWidget(QtWidgets.QLabel("Tc"), 2, 4)
        self.Tc = Entrada_con_unidades(unidades.Temperature)
        layout.addWidget(self.Tc, 2, 5)
        layout.addWidget(QtWidgets.QLabel("Pc"), 3, 4)
        self.Pc = Entrada_con_unidades(unidades.Pressure)
        layout.addWidget(self.Pc, 3, 5)
        layout.addWidget(QtWidgets.QLabel("Vc"), 4, 4)
        self.Vc = Entrada_con_unidades(unidades.SpecificVolume)
        layout.addWidget(self.Vc, 4, 5)
        layout.addWidget(QtWidgets.QLabel("Zc"), 5, 4)
        self.Zc = Entrada_con_unidades(float)
        layout.addWidget(self.Zc, 5, 5)
        label = QtWidgets.QLabel("ω")
        label.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt", "Acentric factor"))
        layout.addWidget(label, 6, 4)
        self.f_acent = Entrada_con_unidades(float)
        layout.addWidget(self.f_acent, 6, 5)
        label = QtWidgets.QLabel("m")
        label.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt", "Refractivity Intercept"))
        layout.addWidget(label, 7, 4)
        self.refractivity = Entrada_con_unidades(float)
        layout.addWidget(self.refractivity, 7, 5)
        layout.addWidget(QtWidgets.QLabel("CH"), 8, 4)
        self.CH = Entrada_con_unidades(float)
        layout.addWidget(self.CH, 8, 5)
        layout.addWidget(QtWidgets.QLabel("%S"), 9, 4)
        self.S = Entrada_con_unidades(float)
        layout.addWidget(self.S, 9, 5)
        layout.addWidget(QtWidgets.QLabel("%H"), 10, 4)
        self.H = Entrada_con_unidades(float)
        layout.addWidget(self.H, 10, 5)

        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "VGC")), 2, 7)
        self.VGC = Entrada_con_unidades(float)
        layout.addWidget(self.VGC, 2, 8)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Cetane index")), 3, 7)
        self.cetane = Entrada_con_unidades(float)
        layout.addWidget(self.cetane, 3, 8)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Pour point")), 4, 7)
        self.pour = Entrada_con_unidades(unidades.Temperature)
        layout.addWidget(self.pour, 4, 8)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Aniline point")), 5, 7)
        self.aniline = Entrada_con_unidades(unidades.Temperature)
        layout.addWidget(self.aniline, 5, 8)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Freezing point")), 6, 7)
        self.freezing = Entrada_con_unidades(unidades.Temperature)
        layout.addWidget(self.freezing, 6, 8)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Cloud point")), 7, 7)
        self.cloud = Entrada_con_unidades(unidades.Temperature)
        layout.addWidget(self.cloud, 7, 8)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Smoke point")), 8, 7)
        self.smoke = Entrada_con_unidades(unidades.Length)
        layout.addWidget(self.smoke, 8, 8)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Flash point (open)")), 9, 7)
        self.flashOpen = Entrada_con_unidades(unidades.Temperature)
        layout.addWidget(self.flashOpen, 9, 8)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Flash point (closed)")), 10, 7)
        self.flashClosed = Entrada_con_unidades(unidades.Temperature)
        layout.addWidget(self.flashClosed, 10, 8)

        layout.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 15, 8)
        button = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Close)
        button.rejected.connect(self.reject)
        layout.addWidget(button, 16, 1, 1, 8)

        self.setReadOnly(True)
        if petroleo:
            self.rellenar(petroleo)

    def setReadOnly(self, bool):
        self.M.setReadOnly(bool)
        self.Tb.setReadOnly(bool)
        self.gravity.setReadOnly(bool)
        self.API.setReadOnly(bool)
        self.watson.setReadOnly(bool)

        self.Tc.setReadOnly(bool)
        self.Pc.setReadOnly(bool)
        self.Vc.setReadOnly(bool)
        self.Zc.setReadOnly(bool)
        self.f_acent.setReadOnly(bool)
        self.refractivity.setReadOnly(bool)
        self.CH.setReadOnly(bool)
        self.S.setReadOnly(bool)
        self.H.setReadOnly(bool)

        self.n.setReadOnly(bool)
        self.I.setReadOnly(bool)
        self.cetane.setReadOnly(bool)
        self.aniline.setReadOnly(bool)
        self.cloud.setReadOnly(bool)
        self.pour.setReadOnly(bool)
        self.freezing.setReadOnly(bool)
        self.smoke.setReadOnly(bool)
        self.v100.setReadOnly(bool)
        self.v210.setReadOnly(bool)
        self.VGC.setReadOnly(bool)
        self.flashOpen.setReadOnly(bool)
        self.flashClosed.setReadOnly(bool)

    def rellenar(self, petroleo):
        self.nombre.setText(petroleo.name)
        self.M.setValue(petroleo.M)
        self.Tb.setValue(petroleo.Tb)
        self.gravity.setValue(petroleo.SG)
        self.API.setValue(petroleo.API)
        self.watson.setValue(petroleo.Kw)

        self.Tc.setValue(petroleo.Tc)
        self.Pc.setValue(petroleo.Pc)
        self.Vc.setValue(petroleo.Vc)
        self.Zc.setValue(petroleo.Zc)
        self.f_acent.setValue(petroleo.f_acent)
        self.refractivity.setValue(petroleo.Ri)
        self.CH.setValue(petroleo.CH)
        self.S.setValue(petroleo.S)
        self.H.setValue(petroleo.H)

        self.n.setValue(petroleo.n)
        self.I.setValue(petroleo.I)
        self.cetane.setValue(petroleo.CetaneI)
        self.aniline.setValue(petroleo.AnilineP)
        self.cloud.setValue(petroleo.CloudP)
        self.pour.setValue(petroleo.PourP)
        self.freezing.setValue(petroleo.FreezingP)
        self.smoke.setValue(petroleo.SmokeP)
        self.v100.setValue(petroleo.v100)
        self.v210.setValue(petroleo.v210)
        # self.VGC.setValue(petroleo.VGC)
        if petroleo.hasCurve:
            self.flashOpen.setValue(petroleo.self.FlashPo)
            self.flashClosed.setValue(petroleo.self.FlashPc)
예제 #7
0
class UI_equipment(UI_equip):
    """ColumnFUG equipment edition dialog"""
    Equipment = ColumnFUG()

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

        # Calculate tab
        lyt = QtGui.QGridLayout(self.tabCalculo)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Feed tray")), 2, 0)
        self.feed = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_FEED:
            self.feed.addItem(txt)
        self.feed.currentIndexChanged.connect(
            partial(self.changeParams, "feed"))
        lyt.addWidget(self.feed, 2, 1)

        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Condenser")), 3, 0)
        self.condenser = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_CONDENSER:
            self.condenser.addItem(txt)
        self.condenser.currentIndexChanged.connect(
            partial(self.changeParams, "condenser"))
        lyt.addWidget(self.condenser, 3, 1)
        lyt.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 4, 0, 1, 5)

        group = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt",
                                         "Key Components specification"))
        lyt.addWidget(group, 5, 0, 1, 5)
        layout = QtGui.QGridLayout(group)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Light")), 1,
            1)
        self.LK = QtGui.QComboBox()
        layout.addWidget(self.LK, 1, 2)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Split in destilate")), 1, 4)
        self.LKsplit = Entrada_con_unidades(float, spinbox=True, max=1.)
        self.LKsplit.valueChanged.connect(partial(self.changeParams,
                                                  "LKsplit"))
        layout.addWidget(self.LKsplit, 1, 5)

        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Heavy")), 2,
            1)
        self.HK = QtGui.QComboBox()
        layout.addWidget(self.HK, 2, 2)
        layout.addItem(
            QtGui.QSpacerItem(40, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 2, 3)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Spit in residue")),
            2, 4)
        self.HKsplit = Entrada_con_unidades(float, spinbox=True, max=1.)
        self.HKsplit.valueChanged.connect(partial(self.changeParams,
                                                  "HKsplit"))
        layout.addWidget(self.HKsplit, 2, 5)

        indices, nombres, M = getComponents()
        for i, nombre in enumerate(nombres):
            self.LK.addItem("%i - %s" % (i + 1, nombre))
            self.HK.addItem("%i - %s" % (i + 1, nombre))
        self.LK.setCurrentIndex(-1)
        self.HK.setCurrentIndex(-1)
        self.LK.currentIndexChanged.connect(partial(self.changeParams, "LK"))
        self.HK.currentIndexChanged.connect(partial(self.changeParams, "HK"))
        lyt.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 6, 0, 1, 5)

        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Reflux ratio")), 7,
            0)
        self.R = Entrada_con_unidades(float)
        self.R.valueChanged.connect(partial(self.changeParams, "R"))
        lyt.addWidget(self.R, 7, 1)
        lyt.addWidget(QtGui.QLabel("R/Rmin"), 8, 0)
        self.R_Rmin = Entrada_con_unidades(float)
        self.R_Rmin.valueChanged.connect(partial(self.changeParams, "R_Rmin"))
        lyt.addWidget(self.R_Rmin, 8, 1)

        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Design Pressure")),
            7, 3)
        self.Pd = Entrada_con_unidades(Pressure)
        self.Pd.valueChanged.connect(partial(self.changeParams, "Pd"))
        lyt.addWidget(self.Pd, 7, 4)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Pressure loss")), 8,
            3)
        self.DeltaP = Entrada_con_unidades(Pressure)
        self.DeltaP.valueChanged.connect(partial(self.changeParams, "DeltaP"))
        lyt.addWidget(self.DeltaP, 8, 4)
        lyt.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 9, 0, 1, 5)
        self.buttonMcCabe = QtGui.QPushButton(
            QtGui.QApplication.translate("pychemqt", "McCabe-Thiele"))
        self.buttonMcCabe.clicked.connect(self.mcCabe)
        lyt.addWidget(self.buttonMcCabe, 10, 0)

        groupBox_Calculo = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Results"))
        lyt.addWidget(groupBox_Calculo, 11, 0, 1, 5)
        layout = QtGui.QGridLayout(groupBox_Calculo)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Condenser Duty")), 0,
            1)
        self.DutyCondenser = Entrada_con_unidades(Power, retornar=False)
        self.DutyCondenser.setReadOnly(True)
        layout.addWidget(self.DutyCondenser, 0, 2)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Reboiler Duty")), 1,
            1)
        self.DutyReboiler = Entrada_con_unidades(Power, retornar=False)
        self.DutyReboiler.setReadOnly(True)
        layout.addWidget(self.DutyReboiler, 1, 2)
        layout.addWidget(QtGui.QLabel("Rmin"), 2, 1)
        self.Rmin = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.Rmin, 2, 2)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Reflux ratio")), 3,
            1)
        self.RCalculada = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.RCalculada, 3, 2)

        layout.addWidget(QtGui.QLabel("Nmin"), 0, 4)
        self.Nmin = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.Nmin, 0, 5)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Stages")),
            1, 4)
        self.NTray = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.NTray, 1, 5)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Feed stage")), 2, 4)
        self.N_feed = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.N_feed, 2, 5)

        # Cost tab
        lyt = QtGui.QGridLayout(self.tabCostos)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Process")),
            1, 1)
        self.proceso = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_PROCESS:
            self.proceso.addItem(txt)
        self.proceso.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "proceso"))
        lyt.addWidget(self.proceso, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Column tipe")), 2, 1)
        self.tipo = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_COLUMN:
            self.tipo.addItem(txt)
        self.tipo.currentIndexChanged.connect(self.mostrarSubclasificacion)
        lyt.addWidget(self.tipo, 2, 2)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Material")),
            3, 1)
        self.material = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.material.addItem(txt)
        self.material.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material_columna"))
        lyt.addWidget(self.material, 3, 2)

        lyt.addItem(
            QtGui.QSpacerItem(30, 30, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 1, 3, 5, 1)

        self.groupBox_Pisos = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Tray column"))
        lyt.addWidget(self.groupBox_Pisos, 1, 4, 4, 2)
        layout = QtGui.QGridLayout(self.groupBox_Pisos)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Tray type")), 1, 1)
        self.tipoPisos = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_TRAY:
            self.tipoPisos.addItem(txt)
        self.tipoPisos.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "tipo_pisos"))
        layout.addWidget(self.tipoPisos, 1, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Material")),
            2, 1)
        self.materialPisos = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.materialPisos.addItem(txt)
        self.materialPisos.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material_pisos"))
        layout.addWidget(self.materialPisos, 2, 2)
        layout.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 3, 1, 1, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Diameter")),
            4, 1)
        self.diametroPisos = Entrada_con_unidades(Length)
        layout.addWidget(self.diametroPisos, 4, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Stages")),
            5, 1)
        self.NumeroPisos = Entrada_con_unidades(int,
                                                spinbox=True,
                                                min=1,
                                                step=1,
                                                width=50)
        layout.addWidget(self.NumeroPisos, 5, 2)
        layout.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 6, 1, 1, 2)

        self.groupBox_relleno = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Packed column"))
        lyt.addWidget(self.groupBox_relleno, 1, 4, 4, 2)
        layout = QtGui.QGridLayout(self.groupBox_relleno)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Volume")),
            1, 1)
        self.VolumenRelleno = Entrada_con_unidades(Volume, "VolLiq")
        layout.addWidget(self.VolumenRelleno, 1, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Unit Cost")), 2, 1)
        texto = "%s / %s" % (Currency(None).text(),
                             Volume(None).text("VolLiq"))
        self.C_unit_relleno = Entrada_con_unidades(Currency,
                                                   retornar=False,
                                                   textounidad=texto)
        layout.addWidget(self.C_unit_relleno, 2, 2)
        layout.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 3, 1, 1, 2)

        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Diameter")),
            5, 1)
        self.Dc = Entrada_con_unidades(Length)
        lyt.addWidget(self.Dc, 5, 2, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Height")),
            6, 1)
        self.Hc = Entrada_con_unidades(Length)
        lyt.addWidget(self.Hc, 6, 2, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Thickness (top)")),
            6, 4)
        self.EspesorSuperior = Entrada_con_unidades(Length, "Thickness")
        lyt.addWidget(self.EspesorSuperior, 6, 5, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Thickness (bottom)")), 7, 4)
        self.EspesorInferior = Entrada_con_unidades(Length, "Thickness")
        lyt.addWidget(self.EspesorInferior, 7, 5, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Density")),
            7, 1)
        self.EspesorInferior = Entrada_con_unidades(Density, "DenLiq")
        lyt.addWidget(self.EspesorInferior, 7, 2, 1, 2)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt.addWidget(self.Costos, 10, 1, 2, 5)

        lyt.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 12, 1, 1, 6)

        self.groupBox_Costos = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Stimated costs"))
        lyt.addWidget(self.groupBox_Costos, 13, 1, 1, 5)
        layout = QtGui.QGridLayout(self.groupBox_Costos)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Tray cost")), 0, 1)
        self.C_pisos = Entrada_con_unidades(Currency, retornar=False)
        self.C_pisos.setReadOnly(True)
        layout.addWidget(self.C_pisos, 0, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Shell cost")), 1, 1)
        self.C_carcasa = Entrada_con_unidades(Currency, retornar=False)
        self.C_carcasa.setReadOnly(True)
        layout.addWidget(self.C_carcasa, 1, 2)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Platform and ladder")), 2, 1)
        self.C_accesorios = Entrada_con_unidades(Currency, retornar=False)
        self.C_accesorios.setReadOnly(True)
        layout.addWidget(self.C_accesorios, 2, 2)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Column cost")), 0, 4)
        self.C_columna = Entrada_con_unidades(Currency, retornar=False)
        self.C_columna.setReadOnly(True)
        layout.addWidget(self.C_columna, 0, 5)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Purchase costs")), 1,
            4)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        layout.addWidget(self.C_adq, 1, 5)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Installed costs")),
            2, 4)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        layout.addWidget(self.C_inst, 2, 5)

        # Output tab
        self.addSalida(QtGui.QApplication.translate("pychemqt", "Destilate"))
        self.addSalida(QtGui.QApplication.translate("pychemqt", "Residue"))

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

    def mcCabe(self):
        self.Equipment.McCabe()

    def mostrarSubclasificacion(self, ind):
        self.groupBox_Pisos.setVisible(not ind)
        self.groupBox_relleno.setVisible(ind)
        self.changeParamsCoste("tipo", ind)

    def rellenar(self):
        self.buttonMcCabe.setEnabled(self.Equipment.statusMcCabe)
        UI_equip.rellenar(self)
예제 #8
0
class UI_equipment(UI_equip):
    """Pump equipment edition dialog"""
    Equipment = Pump()

    def __init__(self, equipment=None, parent=None):
        """
        equipment: Initial equipment instance to model
        """
        super().__init__(Pump, entrada=False, salida=False, parent=parent)
        self.curva = [0, 0, []]

        # Calculate tab
        lyt = QtWidgets.QGridLayout(self.tabCalculo)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Output Pressure")), 1, 1)
        self.Pout = Entrada_con_unidades(Pressure)
        self.Pout.valueChanged.connect(partial(self.cambiar_data, "Pout"))
        lyt.addWidget(self.Pout, 1, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Pressure increase")), 2, 1)
        self.deltaP = Entrada_con_unidades(Pressure)
        self.deltaP.valueChanged.connect(partial(self.cambiar_data, "deltaP"))
        lyt.addWidget(self.deltaP, 2, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Head")), 3, 1)
        self.Carga = Entrada_con_unidades(Length, "Head")
        self.Carga.valueChanged.connect(partial(self.cambiar_data, "Carga"))
        lyt.addWidget(self.Carga, 3, 2)
        lyt.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 4, 1, 1, 2)
        self.usarCurva = QtWidgets.QCheckBox(
            QtWidgets.QApplication.translate("pychemqt", "Pump curve"))
        self.usarCurva.toggled.connect(self.usarCurvaToggled)
        lyt.addWidget(self.usarCurva, 5, 1, 2, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 7,
            1)
        self.rendimiento = Entrada_con_unidades(float,
                                                min=0,
                                                max=1,
                                                spinbox=True,
                                                step=0.01)
        self.rendimiento.valueChanged.connect(
            partial(self.cambiar_data, "rendimiento"))
        lyt.addWidget(self.rendimiento, 7, 2)
        lyt.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 8, 1, 1, 6)

        self.groupBox_Curva = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Pump curve"))
        self.groupBox_Curva.setEnabled(False)
        lyt.addWidget(self.groupBox_Curva, 5, 4, 3, 1)
        layout = QtWidgets.QGridLayout(self.groupBox_Curva)

        self.bottonCurva = QtWidgets.QPushButton(
            QtWidgets.QApplication.translate("pychemqt", "Curve"))
        self.bottonCurva.clicked.connect(self.bottonCurva_clicked)
        layout.addWidget(self.bottonCurva, 1, 1, 1, 2)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Variable")), 2,
            1)
        self.incognita = QtWidgets.QComboBox(self.tabCalculo)
        self.incognita.setToolTip(
            QtWidgets.QApplication.translate(
                "pychemqt",
                "If use curve, it can calculate the head or the flowrate, in that \
case it override flow of input stream"))
        self.incognita.addItem(
            QtWidgets.QApplication.translate("pychemqt", "Output pressure"))
        self.incognita.addItem(
            QtWidgets.QApplication.translate("pychemqt", "Flowrate"))
        self.incognita.currentIndexChanged.connect(
            partial(self.cambiar_data, "incognita"))
        layout.addWidget(self.incognita, 2, 2)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Diameter")), 3,
            1)
        self.diametro = Entrada_con_unidades(float,
                                             spinbox=True,
                                             step=0.1,
                                             suffix='"')
        self.diametro.valueChanged.connect(
            partial(self.cambiar_data, "diametro"))
        layout.addWidget(self.diametro, 3, 2)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "RPM")), 4, 1)
        self.velocidad = Entrada_con_unidades(int, spinbox=True, step=1)
        self.velocidad.valueChanged.connect(
            partial(self.cambiar_data, "velocidad"))
        layout.addWidget(self.velocidad, 4, 2)

        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Power")), 0, 0)
        self.power = Entrada_con_unidades(Power, retornar=False, readOnly=True)
        layout.addWidget(self.power, 0, 1)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Output Pressure")), 0, 4)
        self.PoutCalculada = Entrada_con_unidades(Pressure, retornar=False)
        self.PoutCalculada.setReadOnly(True)
        layout.addWidget(self.PoutCalculada, 0, 5)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Flowrate")), 1,
            0)
        self.volflow = Entrada_con_unidades(VolFlow, "QLiq", retornar=False)
        self.volflow.setReadOnly(True)
        layout.addWidget(self.volflow, 1, 1)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Head")), 1, 4)
        self.headCalculada = Entrada_con_unidades(Length, retornar=False)
        self.headCalculada.setReadOnly(True)
        layout.addWidget(self.headCalculada, 1, 5)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 2,
            0)
        self.rendimientoCalculado = Entrada_con_unidades(float, width=60)
        self.rendimientoCalculado.setReadOnly(True)
        layout.addWidget(self.rendimientoCalculado, 2, 1)
        layout.addItem(
            QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Minimum), 0, 3)
        lyt.addWidget(group, 9, 1, 1, 6)
        lyt.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 10, 1, 1,
            6)

        # Design tab
        # self.tabDiseno = QtWidgets.QWidget()
        # lyt = QtWidgets.QGridLayout(self.tabDiseno)
        # lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
        #     "pychemqt",
        #     "Not implemented\n\nRef: Gülich - Centrifugal Pumps")), 0, 0)
        # self.tabWidget.insertTab(
        #     2, self.tabDiseno,
        #     QtWidgets.QApplication.translate("pychemqt", "Design"))

        # Cost tab
        lyt = QtWidgets.QGridLayout(self.tabCostos)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Pump type")), 1,
            1)
        self.tipo_bomba = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_BOMBA:
            self.tipo_bomba.addItem(txt)
        self.tipo_bomba.currentIndexChanged.connect(
            self.bomba_currentIndexChanged)
        lyt.addWidget(self.tipo_bomba, 1, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Centrifuge type")), 2, 1)
        self.tipo_centrifuga = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_CENTRIFUGA:
            self.tipo_centrifuga.addItem(txt)
        self.tipo_centrifuga.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "tipo_centrifuga"))
        lyt.addWidget(self.tipo_centrifuga, 2, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Material")), 3,
            1)
        self.material = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.material.addItem(txt)
        self.material.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material"))
        lyt.addWidget(self.material, 3, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Motor type")), 4,
            1)
        self.motor = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MOTOR:
            self.motor.addItem(txt)
        self.motor.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "motor"))
        lyt.addWidget(self.motor, 4, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Motor RPM")), 5,
            1)
        self.rpm = QtWidgets.QComboBox(self.tabCostos)
        for txt in self.Equipment.TEXT_RPM:
            self.rpm.addItem(txt)
        self.rpm.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "rpm"))
        lyt.addWidget(self.rpm, 5, 2)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt.addWidget(self.Costos, 6, 1, 2, 4)

        lyt.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 7, 1, 1, 4)
        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Stimated costs"))
        lyt.addWidget(group, 8, 1, 1, 4)
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Pump")), 0, 0)
        self.C_bomba = Entrada_con_unidades(Currency, retornar=False)
        self.C_bomba.setReadOnly(True)
        layout.addWidget(self.C_bomba, 0, 1)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Motor")), 1, 0)
        self.C_motor = Entrada_con_unidades(Currency, retornar=False)
        self.C_bomba.setReadOnly(True)
        layout.addWidget(self.C_motor, 1, 1)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Purchase cost")),
            0, 4)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        layout.addWidget(self.C_adq, 0, 5)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Installed cost")), 1, 4)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        layout.addWidget(self.C_inst, 1, 5)
        lyt.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 9, 1, 1, 4)

        if equipment:
            self.setEquipment(equipment)

    def cambiar_data(self, parametro, valor):
        if parametro == "Pout":
            self.Carga.clear()
            self.deltaP.clear()
        elif parametro == "deltaP":
            self.Pout.clear()
            self.Carga.clear()
        else:
            self.Pout.clear()
            self.deltaP.clear()
        self.changeParams(parametro, valor)

    def bomba_currentIndexChanged(self, int):
        self.tipo_centrifuga.setDisabled(int)
        self.changeParamsCoste("tipo_bomba", int)

    def usarCurvaToggled(self, int):
        self.groupBox_Curva.setEnabled(int)
        self.rendimiento.setReadOnly(int)
        self.changeParams("usarCurva", int)

    def bottonCurva_clicked(self):
        dialog = bombaCurva.Ui_bombaCurva(
            self.Equipment.kwargs["curvaCaracteristica"], self)
        if dialog.exec_():
            self.curva = dialog.curva
            self.diametro.setValue(dialog.curva[0])
            self.velocidad.setValue(dialog.curva[1])
            self.changeParams("curvaCaracteristica", dialog.curva)
예제 #9
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)
예제 #10
0
class UI_equipment(UI_equip):
    """Pump equipment edition dialog"""
    Equipment = Pump()

    def __init__(self, equipment=None, parent=None):
        """
        equipment: Initial equipment instance to model
        """
        super().__init__(Pump, entrada=False, salida=False, parent=parent)
        self.curva = [0, 0, []]

        # Calculate tab
        lyt = QtWidgets.QGridLayout(self.tabCalculo)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Output Pressure")), 1, 1)
        self.Pout = Entrada_con_unidades(Pressure)
        self.Pout.valueChanged.connect(partial(self.cambiar_data, "Pout"))
        lyt.addWidget(self.Pout, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Pressure increase")), 2, 1)
        self.deltaP = Entrada_con_unidades(Pressure)
        self.deltaP.valueChanged.connect(partial(self.cambiar_data, "deltaP"))
        lyt.addWidget(self.deltaP, 2, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Head")), 3, 1)
        self.Carga = Entrada_con_unidades(Length, "Head")
        self.Carga.valueChanged.connect(partial(self.cambiar_data, "Carga"))
        lyt.addWidget(self.Carga, 3, 2)
        lyt.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            4, 1, 1, 2)
        self.usarCurva = QtWidgets.QCheckBox(
            QtWidgets.QApplication.translate("pychemqt", "Pump curve"))
        self.usarCurva.toggled.connect(self.usarCurvaToggled)
        lyt.addWidget(self.usarCurva, 5, 1, 2, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 7, 1)
        self.rendimiento = Entrada_con_unidades(float, min=0, max=1,
                                                spinbox=True, step=0.01)
        self.rendimiento.valueChanged.connect(
            partial(self.cambiar_data, "rendimiento"))
        lyt.addWidget(self.rendimiento, 7, 2)
        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 8, 1, 1, 6)

        self.groupBox_Curva = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Pump curve"))
        self.groupBox_Curva.setEnabled(False)
        lyt.addWidget(self.groupBox_Curva, 5, 4, 3, 1)
        layout = QtWidgets.QGridLayout(self.groupBox_Curva)

        self.bottonCurva = QtWidgets.QPushButton(
            QtWidgets.QApplication.translate("pychemqt", "Curve"))
        self.bottonCurva.clicked.connect(self.bottonCurva_clicked)
        layout.addWidget(self.bottonCurva, 1, 1, 1, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Variable")), 2, 1)
        self.incognita = QtWidgets.QComboBox(self.tabCalculo)
        self.incognita.setToolTip(QtWidgets.QApplication.translate(
            "pychemqt",
            "If use curve, it can calculate the head or the flowrate, in that \
case it override flow of input stream"))
        self.incognita.addItem(
            QtWidgets.QApplication.translate("pychemqt", "Output pressure"))
        self.incognita.addItem(
            QtWidgets.QApplication.translate("pychemqt", "Flowrate"))
        self.incognita.currentIndexChanged.connect(
            partial(self.cambiar_data, "incognita"))
        layout.addWidget(self.incognita, 2, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Diameter")), 3, 1)
        self.diametro = Entrada_con_unidades(
            float, spinbox=True, step=0.1, suffix='"')
        self.diametro.valueChanged.connect(
            partial(self.cambiar_data, "diametro"))
        layout.addWidget(self.diametro, 3, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "RPM")), 4, 1)
        self.velocidad = Entrada_con_unidades(int, spinbox=True, step=1)
        self.velocidad.valueChanged.connect(
            partial(self.cambiar_data, "velocidad"))
        layout.addWidget(self.velocidad, 4, 2)

        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Power")), 0, 0)
        self.power = Entrada_con_unidades(Power, retornar=False, readOnly=True)
        layout.addWidget(self.power, 0, 1)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Output Pressure")), 0, 4)
        self.PoutCalculada = Entrada_con_unidades(Pressure, retornar=False)
        self.PoutCalculada.setReadOnly(True)
        layout.addWidget(self.PoutCalculada, 0, 5)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Flowrate")), 1, 0)
        self.volflow = Entrada_con_unidades(VolFlow, "QLiq", retornar=False)
        self.volflow.setReadOnly(True)
        layout.addWidget(self.volflow, 1, 1)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Head")), 1, 4)
        self.headCalculada = Entrada_con_unidades(Length, retornar=False)
        self.headCalculada.setReadOnly(True)
        layout.addWidget(self.headCalculada, 1, 5)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 2, 0)
        self.rendimientoCalculado = Entrada_con_unidades(float, width=60)
        self.rendimientoCalculado.setReadOnly(True)
        layout.addWidget(self.rendimientoCalculado, 2, 1)
        layout.addItem(QtWidgets.QSpacerItem(
            40, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Minimum), 0, 3)
        lyt.addWidget(group, 9, 1, 1, 6)
        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 10, 1, 1, 6)

        # Design tab
        # self.tabDiseno = QtWidgets.QWidget()
        # lyt = QtWidgets.QGridLayout(self.tabDiseno)
        # lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
        #     "pychemqt",
        #     "Not implemented\n\nRef: Gülich - Centrifugal Pumps")), 0, 0)
        # self.tabWidget.insertTab(
        #     2, self.tabDiseno,
        #     QtWidgets.QApplication.translate("pychemqt", "Design"))

        # Cost tab
        lyt = QtWidgets.QGridLayout(self.tabCostos)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Pump type")), 1, 1)
        self.tipo_bomba = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_BOMBA:
            self.tipo_bomba.addItem(txt)
        self.tipo_bomba.currentIndexChanged.connect(
            self.bomba_currentIndexChanged)
        lyt.addWidget(self.tipo_bomba, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Centrifuge type")), 2, 1)
        self.tipo_centrifuga = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_CENTRIFUGA:
            self.tipo_centrifuga.addItem(txt)
        self.tipo_centrifuga.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "tipo_centrifuga"))
        lyt.addWidget(self.tipo_centrifuga, 2, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Material")), 3, 1)
        self.material = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.material.addItem(txt)
        self.material.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material"))
        lyt.addWidget(self.material, 3, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Motor type")), 4, 1)
        self.motor = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MOTOR:
            self.motor.addItem(txt)
        self.motor.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "motor"))
        lyt.addWidget(self.motor, 4, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Motor RPM")), 5, 1)
        self.rpm = QtWidgets.QComboBox(self.tabCostos)
        for txt in self.Equipment.TEXT_RPM:
            self.rpm.addItem(txt)
        self.rpm.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "rpm"))
        lyt.addWidget(self.rpm, 5, 2)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt.addWidget(self.Costos, 6, 1, 2, 4)

        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 7, 1, 1, 4)
        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Stimated costs"))
        lyt.addWidget(group, 8, 1, 1, 4)
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Pump")), 0, 0)
        self.C_bomba = Entrada_con_unidades(Currency, retornar=False)
        self.C_bomba.setReadOnly(True)
        layout.addWidget(self.C_bomba, 0, 1)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Motor")), 1, 0)
        self.C_motor = Entrada_con_unidades(Currency, retornar=False)
        self.C_bomba.setReadOnly(True)
        layout.addWidget(self.C_motor, 1, 1)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Purchase cost")), 0, 4)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        layout.addWidget(self.C_adq, 0, 5)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Installed cost")), 1, 4)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        layout.addWidget(self.C_inst, 1, 5)
        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed,
            QtWidgets.QSizePolicy.Fixed), 9, 1, 1, 4)

        if equipment:
            self.setEquipment(equipment)

    def cambiar_data(self, parametro, valor):
        if parametro == "Pout":
            self.Carga.clear()
            self.deltaP.clear()
        elif parametro == "deltaP":
            self.Pout.clear()
            self.Carga.clear()
        else:
            self.Pout.clear()
            self.deltaP.clear()
        self.changeParams(parametro, valor)

    def bomba_currentIndexChanged(self, int):
        self.tipo_centrifuga.setDisabled(int)
        self.changeParamsCoste("tipo_bomba", int)

    def usarCurvaToggled(self, int):
        self.groupBox_Curva.setEnabled(int)
        self.rendimiento.setReadOnly(int)
        self.changeParams("usarCurva", int)

    def bottonCurva_clicked(self):
        dialog = bombaCurva.Ui_bombaCurva(
            self.Equipment.kwargs["curvaCaracteristica"], self)
        if dialog.exec_():
            self.curva = dialog.curva
            self.diametro.setValue(dialog.curva[0])
            self.velocidad.setValue(dialog.curva[1])
            self.changeParams("curvaCaracteristica", dialog.curva)
예제 #11
0
class FoulingWidget(QtWidgets.QWidget):
    """Widget con los parametros de fouling de tuberias"""
    valueChanged = QtCore.pyqtSignal(float)
    Fouling_Factor = {
        "Industrial": {
            "Fuel oil no.2": 0.000352,
            "Fuel oil no.6": 0.000881,
            "Transformer oil": 0.000173,
            "Engine Lube oil": 0.000173,
            "Quench oil": 0.000705,
            "Manufactured gas": 0.001761,
            "Engine exhaust gas": 0.001761,
            "Steam (nonoil bearing)": 0.000088,
            "Exhaust steam (oil bearing)": 0.0003,
            "Refrigerant vapors (Oil bearing)": 0.000352,
            "Compressed air": 0.000176,
            "Ammonia vapor": 0.000176,
            "CO2 vapor": 0.000176,
            "Chlorine vapor": 0.000352,
            "Coal flue gas": 0.001761,
            "Natural gas flue gas": 0.000881,
            "Molten heat transfer salts": 0.000088,
            "Refrigerant liquids": 0.000176,
            "Hydraulic fluid": 0.000176,
            "Industrial organic heat transfer media": 0.000352,
            "Ammonia liquid": 0.000176,
            "Ammonia liquid (oil bearing)": 0.000528,
            "Calcium chloride solutions": 0.000528,
            "Sodium chloride solutions": 0.000528,
            "CO2 liquid": 0.000176,
            "Chlorine liquid": 0.000352,
            "Methanol solutions": 0.000352,
            "Ethanol solutions": 0.000352,
            "Ethilene glycol solutions": 0.000352},
        "Chemical": {
            "Acid gases": 0.00044,
            "Solvent vapors": 0.000176,
            "Stable overhead products": 0.000176,
            "MEA and DEA solutions": 0.000352,
            "DEG and TEG solutions": 0.000352,
            "Stable side draw and bottom product": 0.00026,
            "Caustic solutions": 0.000352,
            "Vegetable oils": 0.000528},
        "Natural Gas-Gasoline": {
            "Natural gas": 0.00026,
            "Overhead products": 0.00026,
            "Lean oil": 0.000352,
            "Rich oil": 0.00026,
            "Natural gasoline": 0.00026,
            "Liquified petroleum gases": 0.00026},
        "Water (T<50C, v<0.9)": {
            "Seawater": 0.000088,
            "Brackish water": 0.000352,
            "Cooling tower (treated)": 0.000176,
            "Cooling tower (untreaterd)": 0.000528,
            "City or well water": 0.000176,
            "River water minimum": 0.000352,
            "River water average": 0.000528,
            "Muddy or silty": 0.000528,
            "Hard (>15 grains/gal": 0.000528,
            "Engine jacket": 0.000176,
            "Distilled, condensate": 0.000088,
            "Distilled, boiler blowdown": 0.000352,
            "Distilled, treated boiler feedwater": 0.000176},
        "Water (T<50C, v>0.9)": {
            "Seawater": 0.000088,
            "Brackish water": 0.000176,
            "Cooling tower (treated)": 0.000176,
            "Cooling tower (untreaterd)": 0.000528,
            "City or well water": 0.000176,
            "River water minimum": 0.000176,
            "River water average": 0.000352,
            "Muddy or silty": 0.000352,
            "Hard (>15 grains/gal": 0.000528,
            "Engine jacket": 0.000176,
            "Distilled, condensate": 0.000088,
            "Distilled, boiler blowdown": 0.000352,
            "Distilled, treated boiler feedwater": 0.000088},
        "Water (T>50C, v<0.9)": {
            "Seawater": 0.000176,
            "Brackish water": 0.000528,
            "Cooling tower (treated)": 0.000352,
            "Cooling tower (untreaterd)": 0.000881,
            "City or well water": 0.000352,
            "River water minimum": 0.000528,
            "River water average": 0.000705,
            "Muddy or silty": 0.000705,
            "Hard (>15 grains/gal": 0.000881,
            "Engine jacket": 0.000176,
            "Distilled, condensate": 0.000088,
            "Distilled, boiler blowdown": 0.000352,
            "Distilled, treated boiler feedwater": 0.000176},
        "Water (T>50C, v>0.9)": {
            "Seawater": 0.000176,
            "Brackish water": 0.000352,
            "Cooling tower (treated)": 0.000352,
            "Cooling tower (untreaterd)": 0.000705,
            "City or well water": 0.000352,
            "River water minimum": 0.000352,
            "River water average": 0.000528,
            "Muddy or silty": 0.000528,
            "Hard (>15 grains/gal": 0.000881,
            "Engine jacket": 0.000176,
            "Distilled, condensate": 0.000088,
            "Distilled, boiler blowdown": 0.000352,
            "Distilled, treated boiler feedwater": 0.000176},
        "Refinery vapors": {
            "Atmospheric tower overhead vapors": 0.000176,
            "Light naphthas": 0.000176,
            "Vacuum overhead vapors": 0.000352},
        "Refinery liq.": {
            "Crude oil dry T<120C, v<0.6": 0.000528,
            "Crude oil salt T<120C, v<0.6": 0.000528,
            "Crude oil dry T<120C, 0.6<v<1.2": 0.000352,
            "Crude oil salt T<120C, 0.6<v<1.2": 0.000352,
            "Crude oil dry T<120C, 1.2<v": 0.000352,
            "Crude oil salt T<120C, 1.2<v": 0.000352,
            "Crude oil dry 120C<T<175C, v<0.6": 0.000528,
            "Crude oil salt 120C<T<175C, v<0.6": 0.000881,
            "Crude oil dry 120C<T<175C, 0.6<v<1.2": 0.000352,
            "Crude oil salt 120C<T<175C, 0.6<v<1.2": 0.000705,
            "Crude oil dry 120C<T<175C, 1.2<v": 0.000352,
            "Crude oil salt 120C<T<175C, 1.2<v": 0.000705,
            "Crude oil dry 175C<T<230C, v<0.6": 0.000705,
            "Crude oil salt 175C<T<230C, v<0.6": 0.001057,
            "Crude oil dry 175C<T<230C, 0.6<v<1.2": 0.000528,
            "Crude oil salt 175C<T<230C, 0.6<v<1.2": 0.000881,
            "Crude oil dry 175C<T<230C, 1.2<v": 0.000528,
            "Crude oil salt 175C<T<230C, 1.2<v": 0.000881,
            "Crude oil dry T>230C, v<0.6": 0.000881,
            "Crude oil salt T>230C, v<0.6": 0.001233,
            "Crude oil dry T>230C, 0.6<v<1.2": 0.000705,
            "Crude oil salt T>230C, 0.6<v<1.2": 0.001057,
            "Crude oil dry T>230C, 1.2<v": 0.000705,
            "Crude oil salt T>230C, 1.2<v": 0.001057,
            "Gasoline": 0.000352,
            "Naphtha and light distillates": 0.00044,
            "Kerosene": 0.00044,
            "Light gas oil": 0.00044,
            "Heavy gas oil": 0.00067,
            "Heavy fuel oils": 0.00105},
        "Refinery Asphalt": {
            "Vacuum tower bottoms": 0.001761,
            "Atmosphere tower bottoms": 0.001233},
        "Refinery Cracking and caking": {
            "Overhead vapors": 0.000352,
            "Light cycle oil": 0.00044,
            "Heavy cycle oil": 0.00061,
            "Light coker gas oil": 0.00061,
            "Heavy coker gas oil": 0.00079,
            "Bottoms slurry oil": 0.000528,
            "Light liquid products": 0.000176},
        "Refinery Reforming": {
            "Reformer charge": 0.000264,
            "Reformer effluent": 0.000264,
            "Hydrocracker charge and effluent": 0.000352,
            "Recycle gas": 0.000176,
            "Overhead vapors": 0.000176,
            "Liquid product >50 API": 0.000176,
            "Liquid product 30-50 API": 0.000352},
        "Refinery Light Ends": {
            "Overhead vapors and gases": 0.000176,
            "Liquid products": 0.000176,
            "Absorption oils": 0.00044,
            "Alkylation trace acid streams": 0.000352,
            "Reboiler streams": 0.00044},
        "Refinery Lube oil": {
            "Feed stock": 0.000352,
            "Solvent feed mix": 0.000352,
            "Solvent": 0.000176,
            "Extract": 0.000528,
            "Rafftnate": 0.000176,
            "Asphalt": 0.000881,
            "Wax slurries": 0.000528,
            "Refined lube oil": 0.000176},
        "Refinery Visbreaker": {
            "Overhead vapor": 0.000528,
            "Visbreaker bottoms": 0.001761},
        "Refinery Naphtha Hydrotreater": {
            "Feed": 0.000528,
            "Effluent": 0.000352,
            "Naphfthas": 0.000352,
            "Overhead vapors": 0.000264},
        "Refinery Catalytic": {
            "Charge": 0.00079,
            "Effluent": 0.000352,
            "H.T. separator": 0.000352,
            "Stripper charge": 0.000528,
            "Liquid products": 0.000352},
        "Refinery HF Alky": {
            "Alkylate, deprop. bottons, main fract": 0.000528,
            "Other": 0.000352}}

    def __init__(self, parent=None):
        super(FoulingWidget, self).__init__(parent)
        layout = QtWidgets.QHBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        self.list = QtWidgets.QComboBox()
        self.list.addItem("")
        layout.addWidget(self.list)
        self.value = Entrada_con_unidades(Fouling, decimales=6)
        self.value.valueChanged.connect(self.valueChanged.emit)
        layout.addWidget(self.value)

        for tipo in sorted(self.Fouling_Factor):
            self.list.insertSeparator(self.list.count()+1)
            for componente in sorted(self.Fouling_Factor[tipo]):
                self.list.addItem(" - ".join([tipo, componente]))
        self.list.currentIndexChanged["QString"].connect(self.rellenar)

    def setValue(self, value):
        self.value.setValue(value)

    def rellenar(self, txt):
        if txt:
            tipo, componente = txt.split(" - ")
            value = self.Fouling_Factor[str(tipo)][str(componente)]
            self.value.setReadOnly(True)
            self.value.setValue(value)
            self.valueChanged.emit(value)
        else:
            self.value.setReadOnly(False)
예제 #12
0
class Dialog_Finned(QtWidgets.QDialog):
    """Dialog to define finned tube properties"""
    def __init__(self, kwarg=None, parent=None):
        super(Dialog_Finned, self).__init__(parent=parent)
        self.setWindowTitle(QtWidgets.QApplication.translate(
            "pychemqt", "Specify tube finned characteristics"))
        layout = QtWidgets.QGridLayout(self)
        self.listTube = QtWidgets.QComboBox()
        self.listTube.addItem("")
        layout.addWidget(self.listTube, 0, 1, 1, 2)

        layout.addItem(QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                         QtWidgets.QSizePolicy.Fixed), 1, 1, 1, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Material")), 2, 1)
        self.listMaterial = QtWidgets.QComboBox()
        self.listMaterial.addItem("")
        self.listMaterial.addItem(QtWidgets.QApplication.translate(
            "pychemqt", "Carbon Steel"))
        layout.addWidget(self.listMaterial, 2, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Thermal Conductivity")), 3, 1)
        self.kFin = Entrada_con_unidades(ThermalConductivity)
        layout.addWidget(self.kFin, 3, 2)
        layout.addItem(QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                         QtWidgets.QSizePolicy.Fixed), 4, 1, 1, 2)

        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Root diameter")), 5, 1)
        self.RootD = Entrada_con_unidades(Length, "PipeDiameter")
        layout.addWidget(self.RootD, 5, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Fin Height")), 6, 1)
        self.hFin = Entrada_con_unidades(Length, "Thickness")
        layout.addWidget(self.hFin, 6, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Base Fin Thickness")), 7, 1)
        self.BaseThickness = Entrada_con_unidades(Length, "Thickness")
        layout.addWidget(self.BaseThickness, 7, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Top Fin Thickness")), 8, 1)
        self.TopThickness = Entrada_con_unidades(Length, "Thickness")
        layout.addWidget(self.TopThickness, 8, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Number of fins")), 9, 1)
        self.Nfin = Entrada_con_unidades(float, textounidad="fins/m")
        layout.addWidget(self.Nfin, 9, 2)

        self.buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Cancel |
                                                QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)
        layout.addWidget(self.buttonBox, 10, 1, 1, 2)

        for tuberia in finnedTube_database:
            self.listTube.addItem("%s %s" % (tuberia[0], tuberia[1]))
        self.listTube.currentIndexChanged.connect(self.rellenarData)
        self.listTube.currentIndexChanged.connect(self.setDisabled)

        if kwarg:
            self.hFin.setValue(kwarg["hFin"])
            self.BaseThickness.setValue(kwarg["thicknessBaseFin"])
            self.TopThickness.setValue(kwarg["thicknessTopFin"])
            self.kFin.setValue(kwarg["kFin"])
            self.Nfin.setValue(kwarg["nFin"])
            self.RootD.setValue(kwarg["rootDoFin"])

    def rellenarData(self, ind):
        tuberia = finnedTube_database[ind-1]
        if tuberia[0] == "HPT":
            self.Nfin.setValue(int(tuberia[1][:2]))
            self.BaseThickness.setValue(tuberia[12]/1000.)
            self.TopThickness.setValue(tuberia[12]/1000.)
            self.RootD.setValue(tuberia[6]/1000.)
            self.hFin.setValue(tuberia[13]/1000.)

    def setDisabled(self, bool):
        self.RootD.setReadOnly(bool)
        self.BaseThickness.setReadOnly(bool)
        self.TopThickness.setReadOnly(bool)
        self.Nfin.setReadOnly(bool)
        self.hFin.setReadOnly(bool)

    def kwarg(self):
        kwarg = {"hFin": self.hFin.value,
                 "thicknessBaseFin": self.BaseThickness.value,
                 "thicknessTopFin": self.TopThickness.value,
                 "kFin": self.kFin.value,
                 "nFin": self.Nfin.value,
                 "rootDoFin": self.RootD.value}
        return kwarg
예제 #13
0
class UI_equipment(UI_equip):
    """Turbine equipment edition dialog"""
    Equipment = Turbine()

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

        # Calculate tab
        lyt_Calc = QtGui.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Method:")), 1, 1)
        self.metodo = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_METODO:
            self.metodo.addItem(txt)
#        self.metodo.addItem(QtGui.QApplication.translate("pychemqt", "Especificar curva de funcionamiento"))
        self.metodo.currentIndexChanged.connect(
            self.on_tipoCalculo_currentIndexChanged)
        lyt_Calc.addWidget(self.metodo, 1, 2, 1, 2)
        lyt_Calc.addItem(QtGui.QSpacerItem(
            40, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed),
            2, 0, 1, 4)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Thermodynamic:")), 3, 1)
        self.termodinamica = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_TERMODINAMICA:
            self.termodinamica.addItem(txt)
        self.termodinamica.currentIndexChanged.connect(
            partial(self.changeParams, "termodinamica"))
        lyt_Calc.addWidget(self.termodinamica, 3, 2, 1, 2)
        lyt_Calc.addItem(QtGui.QSpacerItem(
            40, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed),
            4, 0, 1, 4)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Out Pressure")), 5, 1)
        self.Pout = Entrada_con_unidades(Pressure)
        self.Pout.valueChanged.connect(partial(self.changeParams, "Pout"))
        lyt_Calc.addWidget(self.Pout, 5, 2)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Pressure ratio")), 6, 1)
        self.razon = Entrada_con_unidades(float)
        self.razon.valueChanged.connect(partial(self.changeParams, "razon"))
        lyt_Calc.addWidget(self.razon, 6, 2)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Efficiency")), 7, 1)
        self.rendimiento = Entrada_con_unidades(float)
        self.rendimiento.valueChanged.connect(
            partial(self.changeParams, "rendimiento"))
        lyt_Calc.addWidget(self.rendimiento, 7, 2)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Actual Power")), 8, 1)
        self.trabajo = Entrada_con_unidades(Power)
        self.trabajo.valueChanged.connect(partial(self.changeParams, "trabajo"))
        lyt_Calc.addWidget(self.trabajo, 8, 2)
        lyt_Calc.setRowStretch(10, 1)

        group = QtGui.QGroupBox()
        group.setTitle(QtGui.QApplication.translate("pychemqt", "Results"))
        lyt_Calc.addWidget(group, 12, 1, 1, 2)
        lyt = QtGui.QGridLayout(group)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Power")), 1, 1)
        self.power = Entrada_con_unidades(Power, retornar=False, readOnly=True)
        lyt.addWidget(self.power, 1, 2)
        lyt.addWidget(QtGui.QLabel("Cp/Cv"), 2, 1)
        self.cp_cv = Entrada_con_unidades(float, retornar=False, readOnly=True)
        lyt.addWidget(self.cp_cv, 2, 2)
        lyt.setColumnStretch(3, 1)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Pressure ratio")), 1, 4)
        self.razonCalculada = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.razonCalculada, 1, 5)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Efficiency")), 2, 4)
        self.rendimientoCalculado = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.rendimientoCalculado, 2, 5)

        # Cost tab
        lyt_Cost = QtGui.QGridLayout(self.tabCostos)
        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt_Cost.addWidget(self.Costos, 1, 0, 1, 2)

        lyt_Cost.addItem(QtGui.QSpacerItem(
            20, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding),
            2, 0, 1, 2)
        group = QtGui.QGroupBox(QtGui.QApplication.translate("pychemqt",
                                                             "Stimated Costs"))
        lyt_Cost.addWidget(group, 3, 0, 1, 2)
        lyt = QtGui.QGridLayout(group)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Purchase cost")), 0, 1)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False, tolerancia=8,
                                          decimales=2, readOnly=True)
        lyt.addWidget(self.C_adq, 0, 2)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Installed cost")), 1, 1)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False, tolerancia=8,
                                           decimales=2, readOnly=True)
        lyt.addWidget(self.C_inst, 1, 2)
        lyt_Cost.addItem(QtGui.QSpacerItem(
            20, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed),
            4, 0, 1, 2)

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

    def on_tipoCalculo_currentIndexChanged(self, int):
        """Enabled or disabled widget for data entry to calculate"""
        if int == 0:
            self.trabajo.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.Pout.setReadOnly(False)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(False)
        elif int == 1:
            self.Pout.setReadOnly(True)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(True)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(False)
        elif int == 2:
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(True)
        elif int == 3:
            self.rendimiento.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(False)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(True)
        elif int == 4:
            self.rendimiento.setReadOnly(True)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(True)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(False)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(True)
        else:
            self.rendimiento.setReadOnly(False)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(True)

        self.changeParams("metodo", int)

    def rellenar(self):
        UI_equip.rellenar(self)
        if self.Equipment.status == 1 and self.metodo.currentIndex() == 5:
                self.entrada.setCorriente(self.Equipment.entrada)
예제 #14
0
class UI_equipment(parents.UI_equip):
    """Diálogo de definición de molinos trituradores de sólidos"""

    def __init__(self, entrada=None, parent=None):
        """entrada: Parametro opcional de clase corriente que indica la corriente de entrada en kla tubería"""
        super(UI_equipment, self).__init__(Grinder, entrada=False, salida=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 calculo
        gridLayout_Calculo = QtWidgets.QGridLayout(self.tabCalculo)
        gridLayout_Calculo.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("equipment", "Índice de trabajo de bond:", None)), 1, 0, 1, 1)
        self.Material=QtWidgets.QComboBox()
        self.Material.addItem(QtWidgets.QApplication.translate("equipment", "Definido por el usuario", None))
        for key in sorted(BondIndex.keys()):
            self.Material.addItem(key)
        self.Material.currentIndexChanged[str].connect(self.cambiarBondWordIndex)
        gridLayout_Calculo.addWidget(self.Material, 1, 1, 1, 1)
        self.BondWorkIndex=Entrada_con_unidades(float)
        gridLayout_Calculo.addWidget(self.BondWorkIndex, 1, 2, 1, 1)
        gridLayout_Calculo.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding),10,0,1,5)

        #Pestaña costos
        gridLayout_Costos = QtWidgets.QGridLayout(self.tabCostos)
        gridLayout_Costos.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("equipment", "Tipo:", None)), 1, 1, 1, 1)
        self.tipo=QtWidgets.QComboBox()
        self.tipo.addItem(QtWidgets.QApplication.translate("equipment", "De cono", None))
        self.tipo.addItem(QtWidgets.QApplication.translate("equipment", "Giratorio", None))
        self.tipo.addItem(QtWidgets.QApplication.translate("equipment", "Dentado", None))
        self.tipo.addItem(QtWidgets.QApplication.translate("equipment", "De martillo", None))
        self.tipo.addItem(QtWidgets.QApplication.translate("equipment", "De bolas", None))
        self.tipo.addItem(QtWidgets.QApplication.translate("equipment", "Pulverizador", None))
        self.tipo.currentIndexChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.tipo, 1, 2, 1, 1)
        gridLayout_Costos.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Fixed),2,1,1,2)

        self.Costos=costIndex.CostData(1.3, 2)
        self.Costos.valueChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.Costos,4,1,2,5)

        gridLayout_Costos.addItem(QtWidgets.QSpacerItem(20,20,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding),6,1,1,6)
        gridLayout_Costos.addItem(QtWidgets.QSpacerItem(20,20,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding),10,1,1,6)
        self.groupBox_Costos = QtWidgets.QGroupBox(QtWidgets.QApplication.translate("equipment", "Costos calculados", None))
        gridLayout_Costos.addWidget(self.groupBox_Costos,7,1,1,6)
        gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_Costos)
        gridLayout_5.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("equipment", "Coste Adquisición:", None)),0,1,1,1)
        self.C_adq=Entrada_con_unidades(unidades.Currency, retornar=False, readOnly=True)
        gridLayout_5.addWidget(self.C_adq,0,2,1,1)
        gridLayout_5.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("equipment", "Coste Instalación:", None)),1,1,1,1)
        self.C_inst=Entrada_con_unidades(unidades.Currency, retornar=False, readOnly=True)
        gridLayout_5.addWidget(self.C_inst,1,2,1,1)

        #Pestaña salida
        self.Salida= UI_corriente.Ui_corriente(readOnly=True)
        self.tabWidget.insertTab(3, self.Salida,QtWidgets.QApplication.translate("equipment", "Salida", None))

        self.tabWidget.setCurrentIndex(0)


    def cambiarBondWordIndex(self, txt):
        try:
            value=BondIndex[str(txt)]
        except KeyError:
            self.BondWorkIndex.setReadOnly(False)
            self.BondWorkIndex.clear()
        else:
            self.BondWorkIndex.setValue(value)
            self.BondWorkIndex.setReadOnly(True)

    def cambiar_entrada(self, corriente):
        selfentrada=corriente
        self.calculo()

    def calculo(self):
        if self.todos_datos():

            self.rellenoSalida()

    def rellenoSalida(self):
        pass

    def todos_datos(self):
        pass

    def calcularCostos(self, factor=None, indiceBase=None, indiceActual=None):
        if self.todos_datos():
            if not factor: factor=self.Costos.factor
            if not indiceBase: indiceBase=self.Costos.Base
            if not indiceActual: indiceActual=self.Costos.Actual
            if self.tipo.currentIndex()==0:
                self.FireHeater.Coste(factor, indiceBase, indiceActual, 0, self.tipobox.currentIndex(), self.material.currentIndex())
            else:
                self.FireHeater.Coste(factor, indiceBase, indiceActual, 1, self.tipocilindrico.currentIndex(), self.material.currentIndex())
            self.C_adq.setValue(self.FireHeater.C_adq.config())
            self.C_inst.setValue(self.FireHeater.C_inst.config())
예제 #15
0
class View_Contribution(QtWidgets.QDialog):
    """Dialog to show the properties of a group contribution"""
    def __init__(self, cmp=None, parent=None):
        """Constructor
        cmp: optional new component to show the properties"""
        super(View_Contribution, self).__init__(parent)
        self.setWindowTitle(
            QtWidgets.QApplication.translate(
                "pychemqt", "Group Contribution new component"))
        layout = QtWidgets.QGridLayout(self)

        self.nombre = QtWidgets.QLabel()
        layout.addWidget(self.nombre, 1, 1, 1, 5)
        label = QtWidgets.QLabel("M")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt", "Molecular Weight"))
        layout.addWidget(label, 2, 1)
        self.M = Entrada_con_unidades(float, textounidad="g/mol")
        layout.addWidget(self.M, 2, 2)
        label = QtWidgets.QLabel("Tb")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt",
                                             "Boiling Temperature"))
        layout.addWidget(label, 3, 1)
        self.Tb = Entrada_con_unidades(Temperature)
        layout.addWidget(self.Tb, 3, 2)
        label = QtWidgets.QLabel("Tm")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt",
                                             "Melting Temperature"))
        layout.addWidget(label, 4, 1)
        self.Tf = Entrada_con_unidades(Temperature)
        layout.addWidget(self.Tf, 4, 2)
        layout.addWidget(QtWidgets.QLabel("Tc"), 5, 1)
        self.Tc = Entrada_con_unidades(Temperature)
        layout.addWidget(self.Tc, 5, 2)
        layout.addWidget(QtWidgets.QLabel("Pc"), 6, 1)
        self.Pc = Entrada_con_unidades(Pressure)
        layout.addWidget(self.Pc, 6, 2)
        layout.addWidget(QtWidgets.QLabel("Vc"), 7, 1)
        self.Vc = Entrada_con_unidades(SpecificVolume)
        layout.addWidget(self.Vc, 7, 2)

        label = QtWidgets.QLabel("ΔHf")
        label.setToolTip(
            QtWidgets.QApplication.translate(
                "pychemqt", "Enthalpy of formation of ideal gas"))
        layout.addWidget(label, 8, 1)
        self.Hf = Entrada_con_unidades(Enthalpy)
        layout.addWidget(self.Hf, 8, 2)
        label = QtWidgets.QLabel("ΔGf")
        label.setToolTip(
            QtWidgets.QApplication.translate(
                "pychemqt", "Gibbs free energy of formation of ideal gas"))
        layout.addWidget(label, 9, 1)
        self.Gf = Entrada_con_unidades(Enthalpy)
        layout.addWidget(self.Gf, 9, 2)

        label = QtWidgets.QLabel("ΔHf")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt", "Enthalpy of fusion"))
        layout.addWidget(label, 2, 4)
        self.Hm = Entrada_con_unidades(Enthalpy)
        layout.addWidget(self.Hm, 2, 5)
        label = QtWidgets.QLabel("ΔHv")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt",
                                             "Enthalpy of vaporization"))
        layout.addWidget(label, 3, 4)
        self.Hv = Entrada_con_unidades(Enthalpy)
        layout.addWidget(self.Hv, 3, 5)
        layout.addWidget(QtWidgets.QLabel("Cpa"), 4, 4)
        self.cpa = Entrada_con_unidades(float)
        layout.addWidget(self.cpa, 4, 5)
        layout.addWidget(QtWidgets.QLabel("Cpb"), 5, 4)
        self.cpb = Entrada_con_unidades(float)
        layout.addWidget(self.cpb, 5, 5)
        layout.addWidget(QtWidgets.QLabel("Cpc"), 6, 4)
        self.cpc = Entrada_con_unidades(float)
        layout.addWidget(self.cpc, 6, 5)
        layout.addWidget(QtWidgets.QLabel("Cpd"), 7, 4)
        self.cpd = Entrada_con_unidades(float)
        layout.addWidget(self.cpd, 7, 5)
        layout.addWidget(QtWidgets.QLabel("μa"), 8, 4)
        self.mua = Entrada_con_unidades(float)
        layout.addWidget(self.mua, 8, 5)
        layout.addWidget(QtWidgets.QLabel("μb"), 9, 4)
        self.mub = Entrada_con_unidades(float)
        layout.addWidget(self.mub, 9, 5)

        label = QtWidgets.QLabel("SG")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt",
                                             "Specific gravity at 60ºF"))
        layout.addWidget(label, 2, 7)
        self.gravity = Entrada_con_unidades(float)
        layout.addWidget(self.gravity, 2, 8)
        label = QtWidgets.QLabel("API")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt",
                                             "API Specific gravity"))
        layout.addWidget(label, 3, 7)
        self.API = Entrada_con_unidades(float)
        layout.addWidget(self.API, 3, 8)
        label = QtWidgets.QLabel("Kw")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt",
                                             "Watson characterization factor"))
        layout.addWidget(label, 4, 7)
        self.watson = Entrada_con_unidades(float)
        layout.addWidget(self.watson, 4, 8)

        label = QtWidgets.QLabel("w")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt", "Acentric factor"))
        layout.addWidget(label, 5, 7)
        self.f_acent = Entrada_con_unidades(float)
        layout.addWidget(self.f_acent, 5, 8)
        label = QtWidgets.QLabel("Ra")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt", "Rackett constant"))
        layout.addWidget(label, 6, 7)
        self.rackett = Entrada_con_unidades(float)
        layout.addWidget(self.rackett, 6, 8)
        label = QtWidgets.QLabel("Vliq")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt",
                                             "Volume Liquid Constant"))
        layout.addWidget(label, 7, 7)
        self.Vliq = Entrada_con_unidades(float)
        layout.addWidget(self.Vliq, 7, 8)
        label = QtWidgets.QLabel("Sol")
        label.setToolTip(
            QtWidgets.QApplication.translate("pychemqt",
                                             "Solubility Parameter"))
        layout.addWidget(label, 8, 7)
        self.Parametro_solubilidad = Entrada_con_unidades(SolubilityParameter)
        layout.addWidget(self.Parametro_solubilidad, 8, 8)

        layout.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 15, 8)
        btn = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Close)
        btn.rejected.connect(self.accept)
        layout.addWidget(btn, 16, 1, 1, 8)

        self.setReadOnly(True)
        if cmp:
            self.rellenar(cmp)

    def setReadOnly(self, bool):
        self.M.setReadOnly(bool)
        self.Tb.setReadOnly(bool)
        self.Tf.setReadOnly(bool)
        self.Tc.setReadOnly(bool)
        self.Pc.setReadOnly(bool)
        self.Vc.setReadOnly(bool)
        self.Hf.setReadOnly(bool)
        self.Gf.setReadOnly(bool)

        self.Hm.setReadOnly(bool)
        self.Hv.setReadOnly(bool)
        self.cpa.setReadOnly(bool)
        self.cpb.setReadOnly(bool)
        self.cpc.setReadOnly(bool)
        self.cpd.setReadOnly(bool)
        self.mua.setReadOnly(bool)
        self.mub.setReadOnly(bool)

        self.gravity.setReadOnly(bool)
        self.API.setReadOnly(bool)
        self.watson.setReadOnly(bool)
        self.f_acent.setReadOnly(bool)
        self.rackett.setReadOnly(bool)
        self.Vliq.setReadOnly(bool)
        self.Parametro_solubilidad.setReadOnly(bool)

    def rellenar(self, cmp):
        self.nombre.setText(cmp.name)
        self.M.setValue(cmp.M)
        self.Tb.setValue(cmp.Tb)
        self.Tf.setValue(cmp.Tf)
        self.Tc.setValue(cmp.Tc)
        self.Pc.setValue(cmp.Pc)
        self.Vc.setValue(cmp.Vc)
        self.Hf.setValue(cmp.Hf)
        self.Gf.setValue(cmp.Gf)

        self.Hm.setValue(cmp.Hm)
        self.Hv.setValue(cmp.Hv)
        self.cpa.setValue(cmp.cp[0])
        self.cpb.setValue(cmp.cp[1])
        self.cpc.setValue(cmp.cp[2])
        self.cpd.setValue(cmp.cp[3])

        self.gravity.setValue(cmp.SG)
        self.API.setValue(cmp.API)
        self.watson.setValue(cmp.Kw)
        self.f_acent.setValue(cmp.f_acent)
        self.rackett.setValue(cmp.rackett)
        self.Vliq.setValue(cmp.Vliq)
        self.Parametro_solubilidad.setValue(cmp.Parametro_solubilidad)
예제 #16
0
class UI_equipment(UI_equip):
    """Fireheater equipment edition dialog"""
    Equipment = Fired_Heater()

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

        # Calculate tab
        layout = QtWidgets.QGridLayout(self.tabCalculo)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Output Temperature")), 1, 1)
        self.Tout = Entrada_con_unidades(Temperature, resaltado=True)
        self.Tout.valueChanged.connect(partial(self.changeParams, "Tout"))
        layout.addWidget(self.Tout, 1, 2)
        layout.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 2, 0, 1, 6)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Pressure drop")),
            3, 1)
        self.deltaP = Entrada_con_unidades(Pressure)
        self.deltaP.valueChanged.connect(partial(self.changeParams, "deltaP"))
        layout.addWidget(self.deltaP, 3, 2)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Maximum heat flux")), 4, 1)
        self.Hmax = Entrada_con_unidades(Power)
        self.Hmax.valueChanged.connect(partial(self.changeParams, "Hmax"))
        layout.addWidget(self.Hmax, 4, 2)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Fuel calorific value")), 5,
            1)
        self.poderCalorifico = Entrada_con_unidades(float)
        self.poderCalorifico.valueChanged.connect(
            partial(self.changeParams, "poderCalorifico"))
        layout.addWidget(self.poderCalorifico, 5, 2)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 6,
            1)
        self.eficiencia = Entrada_con_unidades(float, spinbox=True)
        self.eficiencia.valueChanged.connect(
            partial(self.changeParams, "eficiencia"))
        layout.addWidget(self.eficiencia, 6, 2)
        layout.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 7, 0, 1, 6)

        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        layout.addWidget(group, 8, 1, 1, 5)
        lyt = QtWidgets.QGridLayout(group)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Heat")), 0, 1)
        self.Heat = Entrada_con_unidades(Power, retornar=False, readOnly=True)
        lyt.addWidget(self.Heat, 0, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Fuel")), 1, 1)
        self.CombustibleRequerido = Entrada_con_unidades(VolFlow,
                                                         "QLiq",
                                                         retornar=False,
                                                         readOnly=True)
        lyt.addWidget(self.CombustibleRequerido, 1, 2)
        layout.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 9, 0, 1, 6)

        # Cost tab
        lyt_Cost = QtWidgets.QGridLayout(self.tabCostos)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Type")), 1, 1)
        self.tipo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_TIPO:
            self.tipo.addItem(txt)
        self.tipo.currentIndexChanged.connect(self.mostrarSubclasificacion)
        lyt_Cost.addWidget(self.tipo, 1, 2)
        self.label = QtWidgets.QLabel()
        lyt_Cost.addWidget(self.label, 2, 1)
        self.subtipoBox = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_SUBTIPOBOX:
            self.subtipoBox.addItem(txt)
        self.subtipoBox.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "subtipoBox"))
        lyt_Cost.addWidget(self.subtipoBox, 2, 2)
        self.subtipoCylindrical = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_SUBTIPOCYLINDRICAL:
            self.subtipoCylindrical.addItem(txt)
        self.subtipoCylindrical.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "subtipoCylindrical"))
        lyt_Cost.addWidget(self.subtipoCylindrical, 2, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Material")), 3,
            1)
        self.material = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.material.addItem(txt)
        self.material.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material"))
        lyt_Cost.addWidget(self.material, 3, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Design pressure")), 4, 1)
        self.P_dis = Entrada_con_unidades(Pressure)
        self.P_dis.valueChanged.connect(
            partial(self.changeParamsCoste, "P_dis"))
        lyt_Cost.addWidget(self.P_dis, 4, 2)
        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 5, 1, 1, 6)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt_Cost.addWidget(self.Costos, 6, 1, 2, 5)

        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 8, 1, 1, 6)
        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Stimated Costs"))
        lyt_Cost.addWidget(group, 9, 1, 1, 6)
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Purchase costs")), 0, 1)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        layout.addWidget(self.C_adq, 0, 2)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Installed costs")), 1, 1)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        layout.addWidget(self.C_inst, 1, 2)
        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 10, 1, 1, 6)

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

    def mostrarSubclasificacion(self, ind):
        if ind:
            txt = QtWidgets.QApplication.translate("pychemqt",
                                                   "Cylindrical heater type")
        else:
            txt = QtWidgets.QApplication.translate("pychemqt",
                                                   "Box heater type")
        self.label.setText(txt)
        self.subtipoBox.setVisible(not ind)
        self.subtipoCylindrical.setVisible(ind)
        self.changeParamsCoste("tipo", ind)
예제 #17
0
class UI_equipment(UI_equip):
    """Turbine equipment edition dialog"""
    Equipment = Turbine()

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

        # Calculate tab
        lyt_Calc = QtGui.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Method:")),
            1, 1)
        self.metodo = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_METODO:
            self.metodo.addItem(txt)


#        self.metodo.addItem(QtGui.QApplication.translate("pychemqt", "Especificar curva de funcionamiento"))
        self.metodo.currentIndexChanged.connect(
            self.on_tipoCalculo_currentIndexChanged)
        lyt_Calc.addWidget(self.metodo, 1, 2, 1, 2)
        lyt_Calc.addItem(
            QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 2, 0, 1, 4)
        lyt_Calc.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Thermodynamic:")), 3,
            1)
        self.termodinamica = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_TERMODINAMICA:
            self.termodinamica.addItem(txt)
        self.termodinamica.currentIndexChanged.connect(
            partial(self.changeParams, "termodinamica"))
        lyt_Calc.addWidget(self.termodinamica, 3, 2, 1, 2)
        lyt_Calc.addItem(
            QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 4, 0, 1, 4)
        lyt_Calc.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Out Pressure")), 5,
            1)
        self.Pout = Entrada_con_unidades(Pressure)
        self.Pout.valueChanged.connect(partial(self.changeParams, "Pout"))
        lyt_Calc.addWidget(self.Pout, 5, 2)
        lyt_Calc.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Pressure ratio")), 6,
            1)
        self.razon = Entrada_con_unidades(float)
        self.razon.valueChanged.connect(partial(self.changeParams, "razon"))
        lyt_Calc.addWidget(self.razon, 6, 2)
        lyt_Calc.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Efficiency")), 7, 1)
        self.rendimiento = Entrada_con_unidades(float)
        self.rendimiento.valueChanged.connect(
            partial(self.changeParams, "rendimiento"))
        lyt_Calc.addWidget(self.rendimiento, 7, 2)
        lyt_Calc.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Actual Power")), 8,
            1)
        self.trabajo = Entrada_con_unidades(Power)
        self.trabajo.valueChanged.connect(partial(self.changeParams,
                                                  "trabajo"))
        lyt_Calc.addWidget(self.trabajo, 8, 2)
        lyt_Calc.setRowStretch(10, 1)

        group = QtGui.QGroupBox()
        group.setTitle(QtGui.QApplication.translate("pychemqt", "Results"))
        lyt_Calc.addWidget(group, 12, 1, 1, 2)
        lyt = QtGui.QGridLayout(group)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Power")), 1,
            1)
        self.power = Entrada_con_unidades(Power, retornar=False, readOnly=True)
        lyt.addWidget(self.power, 1, 2)
        lyt.addWidget(QtGui.QLabel("Cp/Cv"), 2, 1)
        self.cp_cv = Entrada_con_unidades(float, retornar=False, readOnly=True)
        lyt.addWidget(self.cp_cv, 2, 2)
        lyt.setColumnStretch(3, 1)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Pressure ratio")), 1,
            4)
        self.razonCalculada = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.razonCalculada, 1, 5)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Efficiency")), 2, 4)
        self.rendimientoCalculado = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.rendimientoCalculado, 2, 5)

        # Cost tab
        lyt_Cost = QtGui.QGridLayout(self.tabCostos)
        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt_Cost.addWidget(self.Costos, 1, 0, 1, 2)

        lyt_Cost.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 2, 0, 1, 2)
        group = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Stimated Costs"))
        lyt_Cost.addWidget(group, 3, 0, 1, 2)
        lyt = QtGui.QGridLayout(group)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Purchase cost")), 0,
            1)
        self.C_adq = Entrada_con_unidades(Currency,
                                          retornar=False,
                                          tolerancia=8,
                                          decimales=2,
                                          readOnly=True)
        lyt.addWidget(self.C_adq, 0, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Installed cost")), 1,
            1)
        self.C_inst = Entrada_con_unidades(Currency,
                                           retornar=False,
                                           tolerancia=8,
                                           decimales=2,
                                           readOnly=True)
        lyt.addWidget(self.C_inst, 1, 2)
        lyt_Cost.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 4, 0, 1, 2)

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

    def on_tipoCalculo_currentIndexChanged(self, int):
        """Enabled or disabled widget for data entry to calculate"""
        if int == 0:
            self.trabajo.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.Pout.setReadOnly(False)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(False)
        elif int == 1:
            self.Pout.setReadOnly(True)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(True)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(False)
        elif int == 2:
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.rendimiento.setReadOnly(False)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(True)
        elif int == 3:
            self.rendimiento.setReadOnly(True)
            self.razon.setReadOnly(True)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(False)
            self.razon.setResaltado(False)
            self.trabajo.setResaltado(True)
        elif int == 4:
            self.rendimiento.setReadOnly(True)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(True)
            self.Pout.setResaltado(False)
            self.rendimiento.setResaltado(False)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(True)
        else:
            self.rendimiento.setReadOnly(False)
            self.razon.setReadOnly(False)
            self.trabajo.setReadOnly(False)
            self.Pout.setReadOnly(False)
            self.Pout.setResaltado(True)
            self.rendimiento.setResaltado(True)
            self.razon.setResaltado(True)
            self.trabajo.setResaltado(True)

        self.changeParams("metodo", int)

    def rellenar(self):
        UI_equip.rellenar(self)
        if self.Equipment.status == 1 and self.metodo.currentIndex() == 5:
            self.entrada.setCorriente(self.Equipment.entrada)
예제 #18
0
class UI_equipment(UI_equip):
    """Electric precipitator equipment edition dialog"""
    Equipment = ElectricPrecipitator()

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

        # Calculate tab
        lyt_Calc = QtWidgets.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Mode")), 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.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 2, 1, 1, 6)

        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Area")), 3, 1)
        self.area = Entrada_con_unidades(Area, resaltado=True)
        self.area.valueChanged.connect(partial(self.changeParams, "area"))
        lyt_Calc.addWidget(self.area, 3, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Allowable efficiency")), 4,
            1)
        self.rendimientoAdmisible = Entrada_con_unidades(float, readOnly=True)
        self.rendimientoAdmisible.valueChanged.connect(
            partial(self.changeParams, "rendimientoAdmisible"))
        lyt_Calc.addWidget(self.rendimientoAdmisible, 4, 2)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 5, 1, 1, 6)

        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Dielectric constant")), 6, 1)
        self.epsilon = Entrada_con_unidades(float)
        self.epsilon.valueChanged.connect(partial(self.changeParams,
                                                  "epsilon"))
        lyt_Calc.addWidget(self.epsilon, 6, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Charging field")), 7, 1)
        self.potencialCarga = Entrada_con_unidades(PotencialElectric)
        self.potencialCarga.valueChanged.connect(
            partial(self.changeParams, "potencialCarga"))
        lyt_Calc.addWidget(self.potencialCarga, 7, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Collecting field")), 8, 1)
        self.potencialDescarga = Entrada_con_unidades(PotencialElectric)
        self.potencialDescarga.valueChanged.connect(
            partial(self.changeParams, "potencialDescarga"))
        lyt_Calc.addWidget(self.potencialDescarga, 8, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Pressure drop")),
            9, 1)
        self.deltaP = Entrada_con_unidades(DeltaP)
        self.deltaP.valueChanged.connect(partial(self.changeParams, "deltaP"))
        lyt_Calc.addWidget(self.deltaP, 9, 2)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 10, 1, 1,
            6)

        groupbox = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Result"))
        lyt_Calc.addWidget(groupbox, 11, 1, 1, 5)
        lyt = QtWidgets.QGridLayout(groupbox)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Area")), 0, 1)
        self.areaCalculada = Entrada_con_unidades(Area, retornar=False)
        self.areaCalculada.setReadOnly(True)
        lyt.addWidget(self.areaCalculada, 0, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 1,
            1)
        self.rendimiento = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.rendimiento, 1, 2)
        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"))

        if equipment:
            self.setEquipment(equipment)

    def tipoCalculoCambiado(self, tipo_calculo):
        self.area.setReadOnly(tipo_calculo)
        self.area.setResaltado(not tipo_calculo)
        self.rendimientoAdmisible.setReadOnly(not tipo_calculo)
        self.rendimientoAdmisible.setResaltado(tipo_calculo)
        self.changeParams("metodo", tipo_calculo)
예제 #19
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)
예제 #20
0
파일: widget.py 프로젝트: edusegzy/pychemqt
class FoulingWidget(QtGui.QWidget):
    """Widget con los parametros de fouling de tuberias"""
    valueChanged = QtCore.pyqtSignal(float)
    Fouling_Factor = {
        "Industrial": {
            "Fuel oil no.2": 0.000352,
            "Fuel oil no.6": 0.000881,
            "Transformer oil": 0.000173,
            "Engine Lube oil": 0.000173,
            "Quench oil": 0.000705,
            "Manufactured gas": 0.001761,
            "Engine exhaust gas": 0.001761,
            "Steam (nonoil bearing)": 0.000088,
            "Exhaust steam (oil bearing)": 0.0003,
            "Refrigerant vapors (Oil bearing)": 0.000352,
            "Compressed air": 0.000176,
            "Ammonia vapor": 0.000176,
            "CO2 vapor": 0.000176,
            "Chlorine vapor": 0.000352,
            "Coal flue gas": 0.001761,
            "Natural gas flue gas": 0.000881,
            "Molten heat transfer salts": 0.000088,
            "Refrigerant liquids": 0.000176,
            "Hydraulic fluid": 0.000176,
            "Industrial organic heat transfer media": 0.000352,
            "Ammonia liquid": 0.000176,
            "Ammonia liquid (oil bearing)": 0.000528,
            "Calcium chloride solutions": 0.000528,
            "Sodium chloride solutions": 0.000528,
            "CO2 liquid": 0.000176,
            "Chlorine liquid": 0.000352,
            "Methanol solutions": 0.000352,
            "Ethanol solutions": 0.000352,
            "Ethilene glycol solutions": 0.000352},
        "Chemical": {
            "Acid gases": 0.00044,
            "Solvent vapors": 0.000176,
            "Stable overhead products": 0.000176,
            "MEA and DEA solutions": 0.000352,
            "DEG and TEG solutions": 0.000352,
            "Stable side draw and bottom product": 0.00026,
            "Caustic solutions": 0.000352,
            "Vegetable oils": 0.000528},
        "Natural Gas-Gasoline": {
            "Natural gas": 0.00026,
            "Overhead products": 0.00026,
            "Lean oil": 0.000352,
            "Rich oil": 0.00026,
            "Natural gasoline": 0.00026,
            "Liquified petroleum gases": 0.00026},
        u"Water (T<50C, v<0.9)": {
            "Seawater": 0.000088,
            "Brackish water": 0.000352,
            "Cooling tower (treated)": 0.000176,
            "Cooling tower (untreaterd)": 0.000528,
            "City or well water": 0.000176,
            "River water minimum": 0.000352,
            "River water average": 0.000528,
            "Muddy or silty": 0.000528,
            "Hard (>15 grains/gal": 0.000528,
            "Engine jacket": 0.000176,
            "Distilled, condensate": 0.000088,
            "Distilled, boiler blowdown": 0.000352,
            "Distilled, treated boiler feedwater": 0.000176},
        u"Water (T<50C, v>0.9)": {
            "Seawater": 0.000088,
            "Brackish water": 0.000176,
            "Cooling tower (treated)": 0.000176,
            "Cooling tower (untreaterd)": 0.000528,
            "City or well water": 0.000176,
            "River water minimum": 0.000176,
            "River water average": 0.000352,
            "Muddy or silty": 0.000352,
            "Hard (>15 grains/gal": 0.000528,
            "Engine jacket": 0.000176,
            "Distilled, condensate": 0.000088,
            "Distilled, boiler blowdown": 0.000352,
            "Distilled, treated boiler feedwater": 0.000088},
        u"Water (T>50C, v<0.9)": {
            "Seawater": 0.000176,
            "Brackish water": 0.000528,
            "Cooling tower (treated)": 0.000352,
            "Cooling tower (untreaterd)": 0.000881,
            "City or well water": 0.000352,
            "River water minimum": 0.000528,
            "River water average": 0.000705,
            "Muddy or silty": 0.000705,
            "Hard (>15 grains/gal": 0.000881,
            "Engine jacket": 0.000176,
            "Distilled, condensate": 0.000088,
            "Distilled, boiler blowdown": 0.000352,
            "Distilled, treated boiler feedwater": 0.000176},
        u"Water (T>50C, v>0.9)": {
            "Seawater": 0.000176,
            "Brackish water": 0.000352,
            "Cooling tower (treated)": 0.000352,
            "Cooling tower (untreaterd)": 0.000705,
            "City or well water": 0.000352,
            "River water minimum": 0.000352,
            "River water average": 0.000528,
            "Muddy or silty": 0.000528,
            "Hard (>15 grains/gal": 0.000881,
            "Engine jacket": 0.000176,
            "Distilled, condensate": 0.000088,
            "Distilled, boiler blowdown": 0.000352,
            "Distilled, treated boiler feedwater": 0.000176},
        u"Refinery vapors": {
            "Atmospheric tower overhead vapors": 0.000176,
            "Light naphthas": 0.000176,
            "Vacuum overhead vapors": 0.000352},
        u"Refinery liq.": {
            "Crude oil dry T<120C, v<0.6": 0.000528,
            "Crude oil salt T<120C, v<0.6": 0.000528,
            "Crude oil dry T<120C, 0.6<v<1.2": 0.000352,
            "Crude oil salt T<120C, 0.6<v<1.2": 0.000352,
            "Crude oil dry T<120C, 1.2<v": 0.000352,
            "Crude oil salt T<120C, 1.2<v": 0.000352,
            "Crude oil dry 120C<T<175C, v<0.6": 0.000528,
            "Crude oil salt 120C<T<175C, v<0.6": 0.000881,
            "Crude oil dry 120C<T<175C, 0.6<v<1.2": 0.000352,
            "Crude oil salt 120C<T<175C, 0.6<v<1.2": 0.000705,
            "Crude oil dry 120C<T<175C, 1.2<v": 0.000352,
            "Crude oil salt 120C<T<175C, 1.2<v": 0.000705,
            "Crude oil dry 175C<T<230C, v<0.6": 0.000705,
            "Crude oil salt 175C<T<230C, v<0.6": 0.001057,
            "Crude oil dry 175C<T<230C, 0.6<v<1.2": 0.000528,
            "Crude oil salt 175C<T<230C, 0.6<v<1.2": 0.000881,
            "Crude oil dry 175C<T<230C, 1.2<v": 0.000528,
            "Crude oil salt 175C<T<230C, 1.2<v": 0.000881,
            "Crude oil dry T>230C, v<0.6": 0.000881,
            "Crude oil salt T>230C, v<0.6": 0.001233,
            "Crude oil dry T>230C, 0.6<v<1.2": 0.000705,
            "Crude oil salt T>230C, 0.6<v<1.2": 0.001057,
            "Crude oil dry T>230C, 1.2<v": 0.000705,
            "Crude oil salt T>230C, 1.2<v": 0.001057,
            "Gasoline": 0.000352,
            "Naphtha and light distillates": 0.00044,
            "Kerosene": 0.00044,
            "Light gas oil": 0.00044,
            "Heavy gas oil": 0.00067,
            "Heavy fuel oils": 0.00105},
        u"Refinery Asphalt": {
            "Vacuum tower bottoms": 0.001761,
            "Atmosphere tower bottoms": 0.001233},
        u"Refinery Cracking and caking": {
            "Overhead vapors": 0.000352,
            "Light cycle oil": 0.00044,
            "Heavy cycle oil": 0.00061,
            "Light coker gas oil": 0.00061,
            "Heavy coker gas oil": 0.00079,
            "Bottoms slurry oil": 0.000528,
            "Light liquid products": 0.000176},
        u"Refinery Reforming": {
            "Reformer charge": 0.000264,
            "Reformer effluent": 0.000264,
            "Hydrocracker charge and effluent": 0.000352,
            "Recycle gas": 0.000176,
            "Overhead vapors": 0.000176,
            "Liquid product >50 API": 0.000176,
            "Liquid product 30-50 API": 0.000352},
        u"Refinery Light Ends": {
            "Overhead vapors and gases": 0.000176,
            "Liquid products": 0.000176,
            "Absorption oils": 0.00044,
            "Alkylation trace acid streams": 0.000352,
            "Reboiler streams": 0.00044},
        u"Refinery Lube oil": {
            "Feed stock": 0.000352,
            "Solvent feed mix": 0.000352,
            "Solvent": 0.000176,
            "Extract": 0.000528,
            "Rafftnate": 0.000176,
            "Asphalt": 0.000881,
            "Wax slurries": 0.000528,
            "Refined lube oil": 0.000176},
        u"Refinery Visbreaker": {
            "Overhead vapor": 0.000528,
            "Visbreaker bottoms": 0.001761},
        u"Refinery Naphtha Hydrotreater": {
            "Feed": 0.000528,
            "Effluent": 0.000352,
            "Naphfthas": 0.000352,
            "Overhead vapors": 0.000264},
        u"Refinery Catalytic": {
            "Charge": 0.00079,
            "Effluent": 0.000352,
            "H.T. separator": 0.000352,
            "Stripper charge": 0.000528,
            "Liquid products": 0.000352},
        u"Refinery HF Alky": {
            "Alkylate, deprop. bottons, main fract": 0.000528,
            "Other": 0.000352}}

    def __init__(self, parent=None):
        super(FoulingWidget, self).__init__(parent)
        layout = QtGui.QHBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        self.list = QtGui.QComboBox()
        self.list.addItem("")
        layout.addWidget(self.list)
        self.value = Entrada_con_unidades(Fouling, decimales=6)
        self.value.valueChanged.connect(self.valueChanged.emit)
        layout.addWidget(self.value)

        for tipo in sorted(self.Fouling_Factor):
            self.list.insertSeparator(self.list.count()+1)
            for componente in sorted(self.Fouling_Factor[tipo]):
                self.list.addItem(" - ".join([tipo, componente]))
        self.list.currentIndexChanged["QString"].connect(self.rellenar)

    def setValue(self, value):
        self.value.setValue(value)

    def rellenar(self, txt):
        if txt:
            tipo, componente = txt.split(" - ")
            value = self.Fouling_Factor[str(tipo)][str(componente)]
            self.value.setReadOnly(True)
            self.value.setValue(value)
            self.valueChanged.emit(value)
        else:
            self.value.setReadOnly(False)
예제 #21
0
class UI_equipment(UI_equip):
    """ColumnFUG equipment edition dialog"""
    Equipment = ColumnFUG()

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

        # Calculate tab
        lyt = QtWidgets.QGridLayout(self.tabCalculo)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Feed tray")), 2, 0)
        self.feed = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_FEED:
            self.feed.addItem(txt)
        self.feed.currentIndexChanged.connect(
            partial(self.changeParams, "feed"))
        lyt.addWidget(self.feed, 2, 1)

        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Condenser")), 3, 0)
        self.condenser = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_CONDENSER:
            self.condenser.addItem(txt)
        self.condenser.currentIndexChanged.connect(
            partial(self.changeParams, "condenser"))
        lyt.addWidget(self.condenser, 3, 1)
        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            4, 0, 1, 5)

        group = QtWidgets.QGroupBox(QtWidgets.QApplication.translate(
            "pychemqt", "Key Components specification"))
        lyt.addWidget(group, 5, 0, 1, 5)
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Light")), 1, 1)
        self.LK = QtWidgets.QComboBox()
        layout.addWidget(self.LK, 1, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Split in destilate")), 1, 4)
        self.LKsplit = Entrada_con_unidades(float, spinbox=True, max=1.)
        self.LKsplit.valueChanged.connect(
            partial(self.changeParams, "LKsplit"))
        layout.addWidget(self.LKsplit, 1, 5)

        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Heavy")), 2, 1)
        self.HK = QtWidgets.QComboBox()
        layout.addWidget(self.HK, 2, 2)
        layout.addItem(QtWidgets.QSpacerItem(
            40, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed), 2, 3)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Spit in residue")), 2, 4)
        self.HKsplit = Entrada_con_unidades(float, spinbox=True, max=1.)
        self.HKsplit.valueChanged.connect(
            partial(self.changeParams, "HKsplit"))
        layout.addWidget(self.HKsplit, 2, 5)

        indices, nombres, M = getComponents()
        for i, nombre in enumerate(nombres):
            self.LK.addItem("%i - %s" % (i+1, nombre))
            self.HK.addItem("%i - %s" % (i+1, nombre))
        self.LK.setCurrentIndex(-1)
        self.HK.setCurrentIndex(-1)
        self.LK.currentIndexChanged.connect(partial(self.changeParams, "LK"))
        self.HK.currentIndexChanged.connect(partial(self.changeParams, "HK"))
        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            6, 0, 1, 5)

        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Reflux ratio")), 7, 0)
        self.R = Entrada_con_unidades(float)
        self.R.valueChanged.connect(partial(self.changeParams, "R"))
        lyt.addWidget(self.R, 7, 1)
        lyt.addWidget(QtWidgets.QLabel("R/Rmin"), 8, 0)
        self.R_Rmin = Entrada_con_unidades(float)
        self.R_Rmin.valueChanged.connect(partial(self.changeParams, "R_Rmin"))
        lyt.addWidget(self.R_Rmin, 8, 1)

        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Design Pressure")), 7, 3)
        self.Pd = Entrada_con_unidades(Pressure)
        self.Pd.valueChanged.connect(partial(self.changeParams, "Pd"))
        lyt.addWidget(self.Pd, 7, 4)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Pressure loss")), 8, 3)
        self.DeltaP = Entrada_con_unidades(Pressure)
        self.DeltaP.valueChanged.connect(partial(self.changeParams, "DeltaP"))
        lyt.addWidget(self.DeltaP, 8, 4)
        lyt.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding),
            9, 0, 1, 5)
        self.buttonMcCabe = QtWidgets.QPushButton(
            QtWidgets.QApplication.translate("pychemqt", "McCabe-Thiele"))
        self.buttonMcCabe.clicked.connect(self.mcCabe)
        lyt.addWidget(self.buttonMcCabe, 10, 0)

        groupBox_Calculo = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        lyt.addWidget(groupBox_Calculo, 11, 0, 1, 5)
        layout = QtWidgets.QGridLayout(groupBox_Calculo)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Condenser Duty")), 0, 1)
        self.DutyCondenser = Entrada_con_unidades(Power, retornar=False)
        self.DutyCondenser.setReadOnly(True)
        layout.addWidget(self.DutyCondenser, 0, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Reboiler Duty")), 1, 1)
        self.DutyReboiler = Entrada_con_unidades(Power, retornar=False)
        self.DutyReboiler.setReadOnly(True)
        layout.addWidget(self.DutyReboiler, 1, 2)
        layout.addWidget(QtWidgets.QLabel("Rmin"), 2, 1)
        self.Rmin = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.Rmin, 2, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Reflux ratio")), 3, 1)
        self.RCalculada = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.RCalculada, 3, 2)

        layout.addWidget(QtWidgets.QLabel("Nmin"), 0, 4)
        self.Nmin = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.Nmin, 0, 5)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Stages")), 1, 4)
        self.NTray = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.NTray, 1, 5)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Feed stage")), 2, 4)
        self.N_feed = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.N_feed, 2, 5)

        # Cost tab
        lyt = QtWidgets.QGridLayout(self.tabCostos)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Process")), 1, 1)
        self.proceso = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_PROCESS:
            self.proceso.addItem(txt)
        self.proceso.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "proceso"))
        lyt.addWidget(self.proceso, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Column tipe")), 2, 1)
        self.tipo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_COLUMN:
            self.tipo.addItem(txt)
        self.tipo.currentIndexChanged.connect(self.mostrarSubclasificacion)
        lyt.addWidget(self.tipo, 2, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Material")), 3, 1)
        self.material = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.material.addItem(txt)
        self.material.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material_columna"))
        lyt.addWidget(self.material, 3, 2)

        lyt.addItem(QtWidgets.QSpacerItem(
            30, 30, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            1, 3, 5, 1)

        self.groupBox_Pisos = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Tray column"))
        lyt.addWidget(self.groupBox_Pisos, 1, 4, 4, 2)
        layout = QtWidgets.QGridLayout(self.groupBox_Pisos)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Tray type")), 1, 1)
        self.tipoPisos = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_TRAY:
            self.tipoPisos.addItem(txt)
        self.tipoPisos.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "tipo_pisos"))
        layout.addWidget(self.tipoPisos, 1, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Material")), 2, 1)
        self.materialPisos = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.materialPisos.addItem(txt)
        self.materialPisos.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material_pisos"))
        layout.addWidget(self.materialPisos, 2, 2)
        layout.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            3, 1, 1, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Diameter")), 4, 1)
        self.diametroPisos = Entrada_con_unidades(Length)
        layout.addWidget(self.diametroPisos, 4, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Stages")), 5, 1)
        self.NumeroPisos = Entrada_con_unidades(int, spinbox=True, min=1,
                                                step=1, width=50)
        layout.addWidget(self.NumeroPisos, 5, 2)
        layout.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            6, 1, 1, 2)

        self.groupBox_relleno = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Packed column"))
        lyt.addWidget(self.groupBox_relleno, 1, 4, 4, 2)
        layout = QtWidgets.QGridLayout(self.groupBox_relleno)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Volume")), 1, 1)
        self.VolumenRelleno = Entrada_con_unidades(Volume, "VolLiq")
        layout.addWidget(self.VolumenRelleno, 1, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Unit Cost")), 2, 1)
        texto = "%s / %s" % (Currency(None).text(), Volume(None).text("VolLiq"))
        self.C_unit_relleno = Entrada_con_unidades(Currency, retornar=False,
                                                   textounidad=texto)
        layout.addWidget(self.C_unit_relleno, 2, 2)
        layout.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            3, 1, 1, 2)

        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Diameter")), 5, 1)
        self.Dc = Entrada_con_unidades(Length)
        lyt.addWidget(self.Dc, 5, 2, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Height")), 6, 1)
        self.Hc = Entrada_con_unidades(Length)
        lyt.addWidget(self.Hc, 6, 2, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Thickness (top)")), 6, 4)
        self.EspesorSuperior = Entrada_con_unidades(Length, "Thickness")
        lyt.addWidget(self.EspesorSuperior, 6, 5, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Thickness (bottom)")), 7, 4)
        self.EspesorInferior = Entrada_con_unidades(Length, "Thickness")
        lyt.addWidget(self.EspesorInferior, 7, 5, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Density")), 7, 1)
        self.EspesorInferior = Entrada_con_unidades(Density, "DenLiq")
        lyt.addWidget(self.EspesorInferior, 7, 2, 1, 2)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt.addWidget(self.Costos, 10, 1, 2, 5)

        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding),
            12, 1, 1, 6)

        self.groupBox_Costos = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Stimated costs"))
        lyt.addWidget(self.groupBox_Costos, 13, 1, 1, 5)
        layout = QtWidgets.QGridLayout(self.groupBox_Costos)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Tray cost")), 0, 1)
        self.C_pisos = Entrada_con_unidades(Currency, retornar=False)
        self.C_pisos.setReadOnly(True)
        layout.addWidget(self.C_pisos, 0, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Shell cost")), 1, 1)
        self.C_carcasa = Entrada_con_unidades(Currency, retornar=False)
        self.C_carcasa.setReadOnly(True)
        layout.addWidget(self.C_carcasa, 1, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Platform and ladder")), 2, 1)
        self.C_accesorios = Entrada_con_unidades(Currency, retornar=False)
        self.C_accesorios.setReadOnly(True)
        layout.addWidget(self.C_accesorios, 2, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Column cost")), 0, 4)
        self.C_columna = Entrada_con_unidades(Currency, retornar=False)
        self.C_columna.setReadOnly(True)
        layout.addWidget(self.C_columna, 0, 5)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Purchase costs")), 1, 4)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        layout.addWidget(self.C_adq, 1, 5)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Installed costs")), 2, 4)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        layout.addWidget(self.C_inst, 2, 5)

        # Output tab
        self.addSalida(QtWidgets.QApplication.translate("pychemqt", "Destilate"))
        self.addSalida(QtWidgets.QApplication.translate("pychemqt", "Residue"))

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

    def mcCabe(self):
        self.Equipment.McCabe()

    def mostrarSubclasificacion(self, ind):
        self.groupBox_Pisos.setVisible(not ind)
        self.groupBox_relleno.setVisible(ind)
        self.changeParamsCoste("tipo", ind)

    def rellenar(self):
        self.buttonMcCabe.setEnabled(self.Equipment.statusMcCabe)
        UI_equip.rellenar(self)
예제 #22
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)
예제 #23
0
class UI_equipment(UI_equip):
    """Double pipe heat exchanger edition dialog"""
    Equipment = Hairpin()

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

        # Input tab
        self.addEntrada(QtGui.QApplication.translate("pychemqt", "Tube"),
                        "entradaTubo")
        self.addEntrada(QtGui.QApplication.translate("pychemqt", "Annulli"),
                        "entradaExterior")

        # Pipe catalog tab
        tabCatalogo = QtGui.QWidget()
        self.tabWidget.insertTab(
            1, tabCatalogo,
            QtGui.QApplication.translate("pychemqt", "Catalog"))
        lyt = QtGui.QGridLayout(tabCatalogo)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Tube length")), 4, 1)
        self.LTube = Entrada_con_unidades(Length)
        self.LTube.valueChanged.connect(partial(self.changeParams, "LTube"))
        lyt.addWidget(self.LTube, 4, 2)
        lyt.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 5, 1)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Tube internal diameter")), 6, 1)
        self.DiTube = Entrada_con_unidades(Length, "pipeDiameter")
        self.DiTube.valueChanged.connect(partial(self.changeParams, "DiTube"))
        lyt.addWidget(self.DiTube, 6, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Tube external diameter")), 7, 1)
        self.DeTube = Entrada_con_unidades(Length, "pipeDiameter")
        self.DeTube.valueChanged.connect(partial(self.changeParams, "DeTube"))
        lyt.addWidget(self.DeTube, 7, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Tube thickness")), 8,
            1)
        self.wTube = Entrada_con_unidades(Length, "Thickness")
        self.wTube.valueChanged.connect(partial(self.changeParams, "wTube"))
        lyt.addWidget(self.wTube, 8, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Tube roughness")), 9,
            1)
        self.rTube = Entrada_con_unidades(Length, "Thickness")
        self.rTube.valueChanged.connect(partial(self.changeParams, "rTube"))
        lyt.addWidget(self.rTube, 9, 2)
        lyt.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 10, 1)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Annulli external diameter")), 11,
            1)
        self.DeeTube = Entrada_con_unidades(Length, "pipeDiameter")
        self.DeeTube.valueChanged.connect(partial(self.changeParams,
                                                  "DeeTube"))
        lyt.addWidget(self.DeeTube, 11, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Thermal conductivity")), 12, 1)
        self.kTube = Entrada_con_unidades(ThermalConductivity)
        self.kTube.valueChanged.connect(partial(self.changeParams, "kTube"))
        lyt.addWidget(self.kTube, 12, 2)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Tube Count")), 13, 1)
        self.nTube = Entrada_con_unidades(int)
        self.nTube.valueChanged.connect(partial(self.changeParams, "nTube"))
        lyt.addWidget(self.nTube, 13, 2)

        buttonPipe = QtGui.QPushButton(
            QtGui.QApplication.translate("pychemqt", "Pipe Database"))
        buttonPipe.clicked.connect(self.showMaterial)
        lyt.addWidget(buttonPipe, 6, 3, 4, 1)
        lyt.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 14, 1)
        self.tubeFinned = QtGui.QCheckBox(
            QtGui.QApplication.translate("pychemqt", "Finned Tube"))
        lyt.addWidget(self.tubeFinned, 15, 1, 1, 4)
        self.buttonFin = QtGui.QPushButton(
            QtGui.QApplication.translate("pychemqt", "Finned Pipe Database"))
        self.buttonFin.setEnabled(False)
        self.buttonFin.clicked.connect(self.showFinTube)
        lyt.addWidget(self.buttonFin, 15, 3)
        self.tubeFinned.toggled.connect(
            partial(self.changeParams, "tubeFinned"))
        self.tubeFinned.toggled.connect(self.buttonFin.setEnabled)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Inside Fouling")),
            16, 1)
        self.tubeFouling = FoulingWidget()
        self.tubeFouling.valueChanged.connect(
            partial(self.changeParams, "tubeFouling"))
        lyt.addWidget(self.tubeFouling, 16, 2, 1, 5)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Outside Fouling")),
            17, 1)
        self.annulliFouling = FoulingWidget()
        self.annulliFouling.valueChanged.connect(
            partial(self.changeParams, "annulliFouling"))
        lyt.addWidget(self.annulliFouling, 17, 2, 1, 5)
        lyt.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 20, 1, 1, 6)

        # Calculate tab
        lyt = QtGui.QGridLayout(self.tabCalculo)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Mode")), 1,
            1)
        self.modo = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_MODO:
            self.modo.addItem(txt)
        self.modo.currentIndexChanged.connect(
            partial(self.changeParams, "modo"))
        lyt.addWidget(self.modo, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Flujo")), 2,
            1)
        self.flujo = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_FLUJO:
            self.flujo.addItem(txt)
        self.flujo.currentIndexChanged.connect(
            partial(self.changeParams, "flujo"))
        lyt.addWidget(self.flujo, 2, 2)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Layout")),
            3, 1)
        self.orientacion = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_ORIENTACION:
            self.orientacion.addItem(txt)
        self.orientacion.currentIndexChanged.connect(
            partial(self.changeParams, "orientacion"))
        lyt.addWidget(self.orientacion, 3, 2)

        lyt.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 4, 1)

        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Output inside temperature")), 5,
            1)
        self.tubeTout = Entrada_con_unidades(Temperature)
        self.tubeTout.valueChanged.connect(
            partial(self.changeParams, "tubeTout"))
        lyt.addWidget(self.tubeTout, 5, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Output annulli temperature")), 6,
            1)
        self.annulliTout = Entrada_con_unidades(Temperature)
        self.annulliTout.valueChanged.connect(
            partial(self.changeParams, "annulliTout"))
        lyt.addWidget(self.annulliTout, 6, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Output inside quality")), 5, 4)
        self.tubeXout = Entrada_con_unidades(float)
        self.tubeXout.valueChanged.connect(
            partial(self.changeParams, "tubeXout"))
        lyt.addWidget(self.tubeXout, 5, 5)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Output annulli quality")), 6, 4)
        self.annulliXout = Entrada_con_unidades(float)
        self.annulliXout.valueChanged.connect(
            partial(self.changeParams, "annulliXout"))
        lyt.addWidget(self.annulliXout, 6, 5)

        lyt.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 15, 1, 1, 6)

        group = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Results"))
        lyt.addWidget(group, 16, 1, 1, 6)
        layout = QtGui.QGridLayout(group)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Heat Duty")), 0, 1)
        self.Q = Entrada_con_unidades(Power, retornar=False, readOnly=True)
        layout.addWidget(self.Q, 0, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Tout Tube")), 1, 1)
        self.ToutTube = Entrada_con_unidades(Temperature, retornar=False)
        self.ToutTube.setReadOnly(True)
        layout.addWidget(self.ToutTube, 1, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Tout Tube")), 2, 1)
        self.ToutAnnulli = Entrada_con_unidades(Temperature, retornar=False)
        self.ToutAnnulli.setReadOnly(True)
        layout.addWidget(self.ToutAnnulli, 2, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "U")), 0, 4)
        self.U = Entrada_con_unidades(HeatTransfCoef, retornar=False)
        self.U.setReadOnly(True)
        layout.addWidget(self.U, 0, 5)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Area")), 1,
            4)
        self.A = Entrada_con_unidades(Area, retornar=False, readOnly=True)
        layout.addWidget(self.A, 1, 5)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Lenght")),
            2, 4)
        self.L = Entrada_con_unidades(Length, retornar=False, readOnly=True)
        layout.addWidget(self.L, 2, 5)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "DeltaP Tube")), 0, 7)
        self.deltaPTube = Entrada_con_unidades(DeltaP, retornar=False)
        self.deltaPTube.setReadOnly(True)
        layout.addWidget(self.deltaPTube, 0, 8)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "DeltaP Annulli")), 1,
            7)
        self.deltaPAnnulli = Entrada_con_unidades(DeltaP, retornar=False)
        self.deltaPAnnulli.setReadOnly(True)
        layout.addWidget(self.deltaPAnnulli, 1, 8)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "CF")), 2, 7)
        self.CF = Entrada_con_unidades(float, retornar=False, readOnly=True)
        layout.addWidget(self.CF, 2, 8)

        lyt.addItem(
            QtGui.QSpacerItem(0, 0, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 17, 1, 1, 6)

        # Cost tab
        lyt = QtGui.QGridLayout(self.tabCostos)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Material")),
            2, 1)
        self.material = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.material.addItem(txt)
        self.material.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material"))
        lyt.addWidget(self.material, 2, 2)
        lyt.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 3, 0, 1, 6)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Design Pressure")),
            4, 1)
        self.P_dis = Entrada_con_unidades(Pressure)
        self.P_dis.valueChanged.connect(
            partial(self.changeParamsCoste, "P_dis"))
        lyt.addWidget(self.P_dis, 4, 2, 1, 1)
        lyt.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 5, 0, 1, 6)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt.addWidget(self.Costos, 6, 1, 2, 5)

        lyt.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 8, 0, 1, 6)
        lyt.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 10, 0, 1, 6)
        group = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Stimated Costs"))
        lyt.addWidget(group, 9, 1, 1, 5)
        layout = QtGui.QGridLayout(group)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Purchase Cost")), 0,
            1)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        layout.addWidget(self.C_adq, 0, 2)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Installed Cost")), 1,
            1)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        self.C_inst.entrada.setReadOnly(True)
        layout.addWidget(self.C_inst, 1, 2)

        # Output Tab
        self.addSalida(QtGui.QApplication.translate("pychemqt", "Tube"))
        self.addSalida(QtGui.QApplication.translate("pychemqt", "Annulli"))

        if equipment:
            self.setEquipment(equipment)

    def showMaterial(self):
        dialogo = Catalogo_Materiales_Dialog()
        if dialogo.exec_():
            material = dialogo.getMaterial()
            if material:
                self.rTube.setValue(material[2])
                self.DiTube.setValue(material[4])
                self.wTube.setValue(material[5])
                self.DeTube.setValue(material[6])

    def showFinTube(self):
        dialogo = Dialog_Finned(self.Equipment.kwargs)
        if dialogo.exec_():
            kwarg = dialogo.kwarg()
            self.calculo(**kwarg)
예제 #24
0
class UI_equipment(UI_equip):
    """Diálogo de definición de reactores"""
    profile_T = None
    Equipment = Reactor()

    def __init__(self, equipment=None, parent=None):
        """entrada: Parametro opcional de clase corriente que indica la corriente de entrada en el reactor"""
        super(UI_equipment, self).__init__(Reactor,
                                           entrada=False,
                                           salida=False,
                                           parent=parent)

        #Pestaña reacciones
        self.Reacciones = widgetReacciones()
        self.Reacciones.changed.connect(self.calculo)
        self.tabWidget.insertTab(
            1, self.Reacciones,
            QtWidgets.QApplication.translate("pychemqt", "Reactions"))

        #Pestaña calculo
        gridLayout_Calculo = QtWidgets.QGridLayout(self.tabCalculo)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Pressure")), 2,
            0, 1, 1)
        self.P = Entrada_con_unidades(unidades.Pressure)
        self.P.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.P, 2, 1, 1, 1)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Pressure drop")),
            3, 0, 1, 1)
        self.DeltaP = Entrada_con_unidades(unidades.Pressure)
        self.DeltaP.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.DeltaP, 3, 1, 1, 1)
        gridLayout_Calculo.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 4, 0, 1, 5)
        lyt = QtWidgets.QHBoxLayout()
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Type")))
        self.tipo = QtWidgets.QComboBox()
        self.tipo.addItem(
            QtWidgets.QApplication.translate("pychemqt",
                                             "CSTR, continuous stirred-tank"))
        self.tipo.addItem(
            QtWidgets.QApplication.translate("pychemqt", "PFR, plug flow"))
        self.tipo.currentIndexChanged.connect(self.tipoCambiado)
        lyt.addWidget(self.tipo)
        lyt.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Fixed))
        gridLayout_Calculo.addLayout(lyt, 5, 0, 1, 5)
        gridLayout_Calculo.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 6, 0, 1, 5)

        groupbox = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Thermal mode"))
        layout = QtWidgets.QGridLayout(groupbox)
        self.checkAdiabatico = QtWidgets.QRadioButton(
            QtWidgets.QApplication.translate("pychemqt", "Adiabatic"))
        self.checkAdiabatico.toggled.connect(self.heatChanged)
        layout.addWidget(self.checkAdiabatico, 1, 1, 1, 1)
        self.checkIsotermico = QtWidgets.QRadioButton(
            QtWidgets.QApplication.translate("pychemqt", "Isothermal"))
        self.checkIsotermico.toggled.connect(self.heatChanged)
        layout.addWidget(self.checkIsotermico, 2, 1, 1, 1)
        self.checkFlux = QtWidgets.QRadioButton(
            QtWidgets.QApplication.translate("pychemqt", "Heat duty"))
        self.checkFlux.toggled.connect(self.heatChanged)
        layout.addWidget(self.checkFlux, 3, 1, 1, 1)
        self.checkIntercambio = QtWidgets.QRadioButton(
            QtWidgets.QApplication.translate("pychemqt", "Heat transfer"))
        self.checkIntercambio.toggled.connect(self.heatChanged)
        layout.addWidget(self.checkIntercambio, 4, 1, 1, 1)
        self.checkPerfil = QtWidgets.QRadioButton(
            QtWidgets.QApplication.translate("pychemqt",
                                             "PFR temperature profile"))
        self.checkPerfil.toggled.connect(self.heatChanged)
        layout.addWidget(self.checkPerfil, 5, 1, 1, 1)
        self.T = Entrada_con_unidades(unidades.Temperature)
        self.T.valueChanged.connect(self.calculo)
        layout.addWidget(self.T, 2, 2, 1, 2)
        self.Q = Entrada_con_unidades(unidades.Power)
        self.Q.valueChanged.connect(self.calculo)
        layout.addWidget(self.Q, 3, 2, 1, 2)
        self.T_ext = Entrada_con_unidades(unidades.Temperature)
        self.T_ext.valueChanged.connect(self.calculo)
        layout.addWidget(self.T_ext, 4, 2, 1, 2)
        self.U = Entrada_con_unidades(unidades.HeatTransfCoef)
        self.U.valueChanged.connect(self.calculo)
        layout.addWidget(self.U, 4, 4)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Flow")), 4, 5)
        self.direccion = QtWidgets.QComboBox()
        self.direccion.addItem(
            QtWidgets.QApplication.translate("pychemqt", "Countercurrent"))
        self.direccion.addItem(
            QtWidgets.QApplication.translate("pychemqt", "Cocurrent"))
        layout.addWidget(self.direccion, 4, 6)
        self.botonPerfil = QtWidgets.QPushButton(
            QtGui.QIcon(
                QtGui.QPixmap(os.environ["pychemqt"] +
                              "/images/button/table.png")),
            QtWidgets.QApplication.translate("pychemqt", "Add Profile"))
        self.botonPerfil.clicked.connect(self.editorPerfil)
        layout.addWidget(self.botonPerfil, 5, 2, 1, 1)
        gridLayout_Calculo.addWidget(groupbox, 7, 0, 1, 5)

        self.groupBox_Diseno = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Design"))
        gridLayout_Calculo.addWidget(self.groupBox_Diseno, 8, 0, 1, 5)
        lyt = QtWidgets.QGridLayout(self.groupBox_Diseno)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Mode")), 1, 1)
        self.modo = QtWidgets.QComboBox()
        self.modo.addItem(
            QtWidgets.QApplication.translate("pychemqt",
                                             "Rating: calculate conversión"))
        self.modo.addItem(
            QtWidgets.QApplication.translate("pychemqt",
                                             "Design, calculate volumen"))
        self.modo.currentIndexChanged.connect(self.calculo)
        lyt.addWidget(self.modo, 1, 2, 1, 3)
        lyt.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Fixed), 1, 5)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Reactor Volume")), 2, 1)
        self.V = Entrada_con_unidades(unidades.Volume, "VolLiq")
        lyt.addWidget(self.V, 2, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Key Component")),
            3, 1)
        self.key = QtWidgets.QComboBox()
        #        for i, nombre in enumerate(self.nombres):
        #            self.key.addItem("%i - %s" %(i+1, nombre))
        lyt.addWidget(self.key, 3, 2)
        lyt.addItem(
            QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 3, 3)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Conversion")), 3,
            4)
        self.conversion = Entrada_con_unidades(float, max=1)
        lyt.addWidget(self.conversion, 3, 5)

        gridLayout_Calculo.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 10, 0, 1,
            5)

        groupBox_Calculo = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        gridLayout_Calculo.addWidget(groupBox_Calculo, 11, 0, 1, 5)
        gridLayout_1 = QtWidgets.QGridLayout(groupBox_Calculo)
        gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "T output")), 0,
            1, 1, 1)
        self.TCalc = Entrada_con_unidades(unidades.Temperature,
                                          retornar=False,
                                          readOnly=True)
        gridLayout_1.addWidget(self.TCalc, 0, 2, 1, 1)
        gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Heat")), 1, 1, 1,
            1)
        self.HeatCalc = Entrada_con_unidades(unidades.Power,
                                             retornar=False,
                                             readOnly=True)
        gridLayout_1.addWidget(self.HeatCalc, 1, 2, 1, 1)

        gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Conversion")), 0,
            4)
        self.conversionCalc = Entrada_con_unidades(float, readOnly=True)
        gridLayout_1.addWidget(self.conversionCalc, 0, 5)
        gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Reactor Volume")), 1, 4)
        self.VCalc = Entrada_con_unidades(unidades.Volume,
                                          "VolLiq",
                                          readOnly=True)
        gridLayout_1.addWidget(self.VCalc, 1, 5)

        self.checkAdiabatico.setChecked(True)
        self.tipoCambiado(0)

    def heatChanged(self):
        self.T.setReadOnly(not self.checkIsotermico.isChecked())
        self.Q.setReadOnly(not self.checkFlux.isChecked())
        self.T_ext.setReadOnly(not self.checkIntercambio.isChecked())
        self.U.setReadOnly(not self.checkIntercambio.isChecked())
        self.direccion.setEnabled(self.checkIntercambio.isChecked()
                                  and self.tipo.currentIndex())
        self.botonPerfil.setEnabled(self.checkPerfil.isChecked())

    def tipoCambiado(self, ind):
        self.checkPerfil.setEnabled(ind)
        self.direccion.setEnabled(self.checkIntercambio.isChecked() and ind)
        self.calculo()

    def editorPerfil(self):
        dialog = inputTable.InputTableDialog(
            2,
            data=self.profile_T,
            title=QtWidgets.QApplication.translate("pychemqt",
                                                   "Temperature profile"),
            horizontalHeader=["x", "T, " + unidades.Temperature(None).text()])
        if dialog.exec_():
            self.profile_T = dialog.data
예제 #25
0
class UI_equipment(UI_equip):
    """Cyclone equipment edition dialog"""
    Equipment = Ciclon()

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

        # Calculate tab
        lyt_Calc = QtWidgets.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Mode")), 0, 1, 1,
            2)
        self.tipo_calculo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_TIPO:
            self.tipo_calculo.addItem(txt)
        self.tipo_calculo.currentIndexChanged.connect(
            self.on_tipoCalculo_currentIndexChanged)
        lyt_Calc.addWidget(self.tipo_calculo, 0, 3, 1, 4)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Method")), 1, 1,
            1, 2)
        self.modelo_rendimiento = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MODEL:
            self.modelo_rendimiento.addItem(txt)
        self.modelo_rendimiento.currentIndexChanged.connect(
            partial(self.changeParams, "modelo_rendimiento"))
        lyt_Calc.addWidget(self.modelo_rendimiento, 1, 3, 1, 4)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "ΔP method",
                                                 None)), 2, 1, 1, 2)
        self.modelo_DeltaP = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MODEL_DELTAP:
            self.modelo_DeltaP.addItem(txt)
        self.modelo_DeltaP.currentIndexChanged.connect(
            partial(self.changeParams, "modelo_DeltaP"))
        lyt_Calc.addWidget(self.modelo_DeltaP, 2, 3, 1, 4)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Design model")),
            3, 1, 1, 2)
        self.modelo_ciclon = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MODEL_CICLON:
            self.modelo_ciclon.addItem(txt)
        self.modelo_ciclon.currentIndexChanged.connect(
            self.modeloEficiencia_Changed)
        lyt_Calc.addWidget(self.modelo_ciclon, 3, 3, 1, 4)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 4, 0, 1, 5)

        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Diameter")), 5,
            1)
        self.Dc = Entrada_con_unidades(Length)
        self.Dc.valueChanged.connect(partial(self.changeParams, "Dc"))
        lyt_Calc.addWidget(self.Dc, 5, 2, 1, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 6,
            1)
        self.rendimientoAdmisible = Entrada_con_unidades(float, spinbox=True)
        self.rendimientoAdmisible.valueChanged.connect(
            partial(self.changeParams, "rendimientoAdmisible"))
        lyt_Calc.addWidget(self.rendimientoAdmisible, 6, 2, 1, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Allowable ΔP",
                                                 None)), 7, 1)
        self.DeltaPAdmisible = Entrada_con_unidades(Pressure)
        self.DeltaPAdmisible.valueChanged.connect(
            partial(self.changeParams, "DeltaPAdmisible"))
        lyt_Calc.addWidget(self.DeltaPAdmisible, 7, 2, 1, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Allowable speed")), 8, 1)
        self.velocidadAdmisible = Entrada_con_unidades(Speed)
        self.velocidadAdmisible.valueChanged.connect(
            partial(self.changeParams, "velocidadAdmisible"))
        lyt_Calc.addWidget(self.velocidadAdmisible, 8, 2, 1, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "No. of ciclones")), 9, 1)
        self.num_ciclones = Entrada_con_unidades(int,
                                                 spinbox=True,
                                                 step=1,
                                                 decimales=0,
                                                 min=1)
        self.num_ciclones.valueChanged.connect(
            partial(self.changeParams, "num_ciclones"))
        lyt_Calc.addWidget(self.num_ciclones, 9, 2, 1, 2)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 10, 0, 1, 4)

        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        lyt_Calc.addWidget(group, 11, 1, 1, 3)
        lyt = QtWidgets.QGridLayout(group)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 1,
            1)
        self.rendimiento = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.rendimiento, 1, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Pressure drop:")), 2, 1)
        self.deltaP = Entrada_con_unidades(DeltaP, readOnly=True)
        lyt.addWidget(self.deltaP, 2, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Admission speed")), 3, 1)
        self.V = Entrada_con_unidades(Speed, readOnly=True)
        lyt.addWidget(self.V, 3, 2)

        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 5, 4, 7, 1)
        group2 = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Geometry"))
        lyt_Calc.addWidget(group2, 5, 5, 7, 1)
        lyt = QtWidgets.QGridLayout(group2)
        lyt.addWidget(QtWidgets.QLabel("D<sub>C</sub>"), 1, 1)
        self.Dcc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Dcc, 1, 2)
        lyt.addWidget(QtWidgets.QLabel("B<sub>C</sub>"), 2, 1)
        self.Bc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Bc, 2, 2)
        lyt.addWidget(QtWidgets.QLabel("H<sub>C</sub>"), 3, 1)
        self.Hc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Hc, 3, 2)
        lyt.addWidget(QtWidgets.QLabel("J<sub>C</sub>"), 4, 1)
        self.Jc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Jc, 4, 2)
        lyt.addWidget(QtWidgets.QLabel("L<sub>C</sub>"), 5, 1)
        self.Lc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Lc, 5, 2)
        lyt.addWidget(QtWidgets.QLabel("Z<sub>C</sub>"), 6, 1)
        self.Zc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Zc, 6, 2)
        lyt.addWidget(QtWidgets.QLabel("D<sub>e</sub>"), 7, 1)
        self.De = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.De, 7, 2)
        lyt.addWidget(QtWidgets.QLabel("S<sub>C</sub>"), 8, 1)
        self.Sc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Sc, 8, 2)
        lyt.addWidget(QtWidgets.QLabel("N"), 9, 1)
        self.NCalc = Entrada_con_unidades(int, readOnly=True)
        lyt.addWidget(self.NCalc, 9, 2)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 0, 7, 10,
            1)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 5, 6, 10,
            1)

        image = QtWidgets.QLabel()
        path = os.environ["CheProcess"] + "/images/equip/ciclon.gif"
        image.setPixmap(QtGui.QPixmap(path))
        image.setScaledContents(True)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        image.setSizePolicy(sizePolicy)
        lyt_Calc.addWidget(image, 0, 8, 12, 1)

        # Cost tab
        lyt_Cost = QtWidgets.QGridLayout(self.tabCostos)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Model")), 1, 1)
        self.tipo_costo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_COST:
            self.tipo_costo.addItem(txt)
        self.tipo_costo.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "tipo_costo"))
        lyt_Cost.addWidget(self.tipo_costo, 1, 2)
        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Fixed), 1, 3)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt_Cost.addWidget(self.Costos, 3, 1, 1, 3)
        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 4, 1, 1, 3)

        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Stimated Costs"))
        lyt_Cost.addWidget(group, 5, 1, 1, 3)
        lyt = QtWidgets.QGridLayout(group)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Number")), 0, 0)
        self.num_ciclonesCoste = Entrada_con_unidades(int, readOnly=True)
        lyt.addWidget(self.num_ciclonesCoste, 0, 1, 1, 3)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Volumetric Flow")), 1, 0)
        self.Q = Entrada_con_unidades(VolFlow, "QGas", retornar=False)
        self.Q.setReadOnly(True)
        lyt.addWidget(self.Q, 1, 1)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Purchase cost")),
            0, 3)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        lyt.addWidget(self.C_adq, 0, 4)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Installed cost")), 1, 3)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        lyt.addWidget(self.C_inst, 1, 4)

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

        self.on_tipoCalculo_currentIndexChanged(0)
        self.modeloEficiencia_Changed(0)
        if equipment:
            self.setEquipment(equipment)

    def on_tipoCalculo_currentIndexChanged(self, int):
        """Habilita o desabilita los datos requeridos para el cálculo"""
        if int and self.modelo_ciclon.count() == 9:
            self.modelo_ciclon.removeItem(8)
        elif not int and self.modelo_ciclon.count() == 8:
            self.modelo_ciclon.addItem(
                QtWidgets.QApplication.translate("pychemqt", "Custom"))

        self.Dc.setReadOnly(int)
        self.Dc.setResaltado(not int)
        self.num_ciclones.setReadOnly(int)
        self.num_ciclones.setResaltado(not int)
        self.rendimientoAdmisible.setReadOnly(not int)
        self.rendimientoAdmisible.setResaltado(int)
        self.velocidadAdmisible.setReadOnly(not int)
        self.velocidadAdmisible.setResaltado(False)
        self.DeltaPAdmisible.setReadOnly(not int)
        self.DeltaPAdmisible.setResaltado(False)
        self.changeParams("tipo_calculo", int)

    def modeloEficiencia_Changed(self, modelo):
        if modelo == 8:
            # Customized model, let user edit dimensions values
            self.Hc.setReadOnly(False)
            self.Hc.setResaltado(True)
            self.Bc.setReadOnly(False)
            self.Bc.setResaltado(True)
            self.Jc.setReadOnly(False)
            self.Jc.setResaltado(False)
            self.Lc.setReadOnly(False)
            self.Lc.setResaltado(False)
            self.Zc.setReadOnly(False)
            self.Zc.setResaltado(False)
            self.De.setReadOnly(False)
            self.De.setResaltado(True)
            self.Sc.setReadOnly(False)
            self.Sc.setResaltado(False)
        else:
            self.Hc.setReadOnly(True)
            self.Hc.setResaltado(False)
            self.Bc.setReadOnly(True)
            self.Bc.setResaltado(False)
            self.Jc.setReadOnly(True)
            self.Jc.setResaltado(False)
            self.Lc.setReadOnly(True)
            self.Lc.setResaltado(False)
            self.Zc.setReadOnly(True)
            self.Zc.setResaltado(False)
            self.De.setReadOnly(True)
            self.De.setResaltado(False)
            self.Sc.setReadOnly(True)
            self.Sc.setResaltado(False)
        self.Dcc.setReadOnly(True)
        self.Dcc.setResaltado(False)
        self.changeParams("modelo_ciclon", modelo)
예제 #26
0
class UI_equipment(UI_equip):
    """Diálogo de definición de reactores"""
    profile_T=None
    Equipment=Reactor()
    def __init__(self, equipment=None, parent=None):
        """entrada: Parametro opcional de clase corriente que indica la corriente de entrada en el reactor"""
        super(UI_equipment, self).__init__(Reactor, entrada=False, salida=False, parent=parent)

        #Pestaña reacciones
        self.Reacciones= widgetReacciones()
        self.Reacciones.changed.connect(self.calculo)
        self.tabWidget.insertTab(1, self.Reacciones, QtWidgets.QApplication.translate("pychemqt", "Reactions"))

        #Pestaña calculo
        gridLayout_Calculo = QtWidgets.QGridLayout(self.tabCalculo)
        gridLayout_Calculo.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Pressure")),2,0,1,1)
        self.P=Entrada_con_unidades(unidades.Pressure)
        self.P.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.P,2,1,1,1)
        gridLayout_Calculo.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Pressure drop")),3,0,1,1)
        self.DeltaP=Entrada_con_unidades(unidades.Pressure)
        self.DeltaP.valueChanged.connect(self.calculo)
        gridLayout_Calculo.addWidget(self.DeltaP,3,1,1,1)
        gridLayout_Calculo.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Fixed),4,0,1,5)
        lyt=QtWidgets.QHBoxLayout()
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Type")))
        self.tipo=QtWidgets.QComboBox()
        self.tipo.addItem(QtWidgets.QApplication.translate("pychemqt", "CSTR, continuous stirred-tank"))
        self.tipo.addItem(QtWidgets.QApplication.translate("pychemqt", "PFR, plug flow"))
        self.tipo.currentIndexChanged.connect(self.tipoCambiado)
        lyt.addWidget(self.tipo)
        lyt.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Fixed))
        gridLayout_Calculo.addLayout(lyt,5,0,1,5)
        gridLayout_Calculo.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Fixed),6,0,1,5)

        groupbox=QtWidgets.QGroupBox(QtWidgets.QApplication.translate("pychemqt", "Thermal mode"))
        layout=QtWidgets.QGridLayout(groupbox)
        self.checkAdiabatico=QtWidgets.QRadioButton(QtWidgets.QApplication.translate("pychemqt", "Adiabatic"))
        self.checkAdiabatico.toggled.connect(self.heatChanged)
        layout.addWidget(self.checkAdiabatico, 1, 1, 1, 1)
        self.checkIsotermico=QtWidgets.QRadioButton(QtWidgets.QApplication.translate("pychemqt", "Isothermal"))
        self.checkIsotermico.toggled.connect(self.heatChanged)
        layout.addWidget(self.checkIsotermico, 2, 1, 1, 1)
        self.checkFlux=QtWidgets.QRadioButton(QtWidgets.QApplication.translate("pychemqt", "Heat duty"))
        self.checkFlux.toggled.connect(self.heatChanged)
        layout.addWidget(self.checkFlux, 3, 1, 1, 1)
        self.checkIntercambio=QtWidgets.QRadioButton(QtWidgets.QApplication.translate("pychemqt", "Heat transfer"))
        self.checkIntercambio.toggled.connect(self.heatChanged)
        layout.addWidget(self.checkIntercambio, 4, 1, 1, 1)
        self.checkPerfil=QtWidgets.QRadioButton(QtWidgets.QApplication.translate("pychemqt", "PFR temperature profile"))
        self.checkPerfil.toggled.connect(self.heatChanged)
        layout.addWidget(self.checkPerfil, 5, 1, 1, 1)
        self.T=Entrada_con_unidades(unidades.Temperature)
        self.T.valueChanged.connect(self.calculo)
        layout.addWidget(self.T, 2, 2, 1, 2)
        self.Q=Entrada_con_unidades(unidades.Power)
        self.Q.valueChanged.connect(self.calculo)
        layout.addWidget(self.Q, 3, 2, 1, 2)
        self.T_ext=Entrada_con_unidades(unidades.Temperature)
        self.T_ext.valueChanged.connect(self.calculo)
        layout.addWidget(self.T_ext,4,2,1,2)
        self.U=Entrada_con_unidades(unidades.HeatTransfCoef)
        self.U.valueChanged.connect(self.calculo)
        layout.addWidget(self.U,4,4)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Flow")),4,5)
        self.direccion=QtWidgets.QComboBox()
        self.direccion.addItem(QtWidgets.QApplication.translate("pychemqt", "Countercurrent"))
        self.direccion.addItem(QtWidgets.QApplication.translate("pychemqt", "Cocurrent"))
        layout.addWidget(self.direccion,4,6)
        self.botonPerfil=QtWidgets.QPushButton(QtGui.QIcon(QtGui.QPixmap(os.environ["pychemqt"]+"/images/button/table.png")), QtWidgets.QApplication.translate("pychemqt", "Add Profile"))
        self.botonPerfil.clicked.connect(self.editorPerfil)
        layout.addWidget(self.botonPerfil,5,2,1,1)
        gridLayout_Calculo.addWidget(groupbox, 7, 0, 1, 5)

        self.groupBox_Diseno= QtWidgets.QGroupBox(QtWidgets.QApplication.translate("pychemqt", "Design"))
        gridLayout_Calculo.addWidget(self.groupBox_Diseno,8,0,1,5)
        lyt = QtWidgets.QGridLayout(self.groupBox_Diseno)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Mode")),1,1)
        self.modo=QtWidgets.QComboBox()
        self.modo.addItem(QtWidgets.QApplication.translate("pychemqt", "Rating: calculate conversión"))
        self.modo.addItem(QtWidgets.QApplication.translate("pychemqt", "Design, calculate volumen"))
        self.modo.currentIndexChanged.connect(self.calculo)
        lyt.addWidget(self.modo,1,2,1,3)
        lyt.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Fixed),1,5)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Reactor Volume")),2,1)
        self.V=Entrada_con_unidades(unidades.Volume, "VolLiq")
        lyt.addWidget(self.V,2,2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Key Component")),3,1)
        self.key=QtWidgets.QComboBox()
#        for i, nombre in enumerate(self.nombres):
#            self.key.addItem("%i - %s" %(i+1, nombre))
        lyt.addWidget(self.key,3,2)
        lyt.addItem(QtWidgets.QSpacerItem(20,10,QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Fixed),3,3)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Conversion")),3,4)
        self.conversion=Entrada_con_unidades(float, max=1)
        lyt.addWidget(self.conversion,3,5)

        gridLayout_Calculo.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding),10,0,1,5)

        groupBox_Calculo = QtWidgets.QGroupBox(QtWidgets.QApplication.translate("pychemqt", "Results"))
        gridLayout_Calculo.addWidget(groupBox_Calculo,11,0,1,5)
        gridLayout_1 = QtWidgets.QGridLayout(groupBox_Calculo)
        gridLayout_1.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "T output")),0,1,1,1)
        self.TCalc=Entrada_con_unidades(unidades.Temperature, retornar=False, readOnly=True)
        gridLayout_1.addWidget(self.TCalc,0,2,1,1)
        gridLayout_1.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Heat")),1,1,1,1)
        self.HeatCalc=Entrada_con_unidades(unidades.Power, retornar=False, readOnly=True)
        gridLayout_1.addWidget(self.HeatCalc,1,2,1,1)

        gridLayout_1.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Conversion")),0,4)
        self.conversionCalc=Entrada_con_unidades(float, readOnly=True)
        gridLayout_1.addWidget(self.conversionCalc,0,5)
        gridLayout_1.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("pychemqt", "Reactor Volume")),1,4)
        self.VCalc=Entrada_con_unidades(unidades.Volume, "VolLiq", readOnly=True)
        gridLayout_1.addWidget(self.VCalc,1,5)

        self.checkAdiabatico.setChecked(True)
        self.tipoCambiado(0)


    def heatChanged(self):
        self.T.setReadOnly(not self.checkIsotermico.isChecked())
        self.Q.setReadOnly(not self.checkFlux.isChecked())
        self.T_ext.setReadOnly(not self.checkIntercambio.isChecked())
        self.U.setReadOnly(not self.checkIntercambio.isChecked())
        self.direccion.setEnabled(self.checkIntercambio.isChecked() and self.tipo.currentIndex())
        self.botonPerfil.setEnabled(self.checkPerfil.isChecked())

    def tipoCambiado(self, ind):
        self.checkPerfil.setEnabled(ind)
        self.direccion.setEnabled(self.checkIntercambio.isChecked() and ind)
        self.calculo()


    def editorPerfil(self):
        dialog=inputTable.InputTableDialog(2, data=self.profile_T, title=QtWidgets.QApplication.translate("pychemqt", "Temperature profile"), horizontalHeader=["x", "T, "+unidades.Temperature(None).text()])
        if dialog.exec_():
            self.profile_T=dialog.data
예제 #27
0
class UI_equipment(parents.UI_equip):
    """Diálogo de definición de molinos trituradores de sólidos"""
    def __init__(self, entrada=None, parent=None):
        """entrada: Parametro opcional de clase corriente que indica la corriente de entrada en kla tubería"""
        super(UI_equipment, self).__init__(Grinder,
                                           entrada=False,
                                           salida=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 calculo
        gridLayout_Calculo = QtWidgets.QGridLayout(self.tabCalculo)
        gridLayout_Calculo.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Índice de trabajo de bond:",
                                                 None)), 1, 0, 1, 1)
        self.Material = QtWidgets.QComboBox()
        self.Material.addItem(
            QtWidgets.QApplication.translate("equipment",
                                             "Definido por el usuario", None))
        for key in sorted(BondIndex.keys()):
            self.Material.addItem(key)
        self.Material.currentIndexChanged[str].connect(
            self.cambiarBondWordIndex)
        gridLayout_Calculo.addWidget(self.Material, 1, 1, 1, 1)
        self.BondWorkIndex = Entrada_con_unidades(float)
        gridLayout_Calculo.addWidget(self.BondWorkIndex, 1, 2, 1, 1)
        gridLayout_Calculo.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 10, 0, 1,
            5)

        #Pestaña costos
        gridLayout_Costos = QtWidgets.QGridLayout(self.tabCostos)
        gridLayout_Costos.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Tipo:", None)),
            1, 1, 1, 1)
        self.tipo = QtWidgets.QComboBox()
        self.tipo.addItem(
            QtWidgets.QApplication.translate("equipment", "De cono", None))
        self.tipo.addItem(
            QtWidgets.QApplication.translate("equipment", "Giratorio", None))
        self.tipo.addItem(
            QtWidgets.QApplication.translate("equipment", "Dentado", None))
        self.tipo.addItem(
            QtWidgets.QApplication.translate("equipment", "De martillo", None))
        self.tipo.addItem(
            QtWidgets.QApplication.translate("equipment", "De bolas", None))
        self.tipo.addItem(
            QtWidgets.QApplication.translate("equipment", "Pulverizador",
                                             None))
        self.tipo.currentIndexChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.tipo, 1, 2, 1, 1)
        gridLayout_Costos.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 2, 1, 1, 2)

        self.Costos = costIndex.CostData(1.3, 2)
        self.Costos.valueChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.Costos, 4, 1, 2, 5)

        gridLayout_Costos.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 6, 1, 1, 6)
        gridLayout_Costos.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 10, 1, 1,
            6)
        self.groupBox_Costos = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("equipment", "Costos calculados",
                                             None))
        gridLayout_Costos.addWidget(self.groupBox_Costos, 7, 1, 1, 6)
        gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_Costos)
        gridLayout_5.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Coste Adquisición:", None)),
            0, 1, 1, 1)
        self.C_adq = Entrada_con_unidades(unidades.Currency,
                                          retornar=False,
                                          readOnly=True)
        gridLayout_5.addWidget(self.C_adq, 0, 2, 1, 1)
        gridLayout_5.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Coste Instalación:", None)),
            1, 1, 1, 1)
        self.C_inst = Entrada_con_unidades(unidades.Currency,
                                           retornar=False,
                                           readOnly=True)
        gridLayout_5.addWidget(self.C_inst, 1, 2, 1, 1)

        #Pestaña salida
        self.Salida = UI_corriente.Ui_corriente(readOnly=True)
        self.tabWidget.insertTab(
            3, self.Salida,
            QtWidgets.QApplication.translate("equipment", "Salida", None))

        self.tabWidget.setCurrentIndex(0)

    def cambiarBondWordIndex(self, txt):
        try:
            value = BondIndex[str(txt)]
        except KeyError:
            self.BondWorkIndex.setReadOnly(False)
            self.BondWorkIndex.clear()
        else:
            self.BondWorkIndex.setValue(value)
            self.BondWorkIndex.setReadOnly(True)

    def cambiar_entrada(self, corriente):
        selfentrada = corriente
        self.calculo()

    def calculo(self):
        if self.todos_datos():

            self.rellenoSalida()

    def rellenoSalida(self):
        pass

    def todos_datos(self):
        pass

    def calcularCostos(self, factor=None, indiceBase=None, indiceActual=None):
        if self.todos_datos():
            if not factor: factor = self.Costos.factor
            if not indiceBase: indiceBase = self.Costos.Base
            if not indiceActual: indiceActual = self.Costos.Actual
            if self.tipo.currentIndex() == 0:
                self.FireHeater.Coste(factor, indiceBase, indiceActual, 0,
                                      self.tipobox.currentIndex(),
                                      self.material.currentIndex())
            else:
                self.FireHeater.Coste(factor, indiceBase, indiceActual, 1,
                                      self.tipocilindrico.currentIndex(),
                                      self.material.currentIndex())
            self.C_adq.setValue(self.FireHeater.C_adq.config())
            self.C_inst.setValue(self.FireHeater.C_inst.config())
예제 #28
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)
예제 #29
0
class UI_equipment(UI_equip):
    """Cyclone equipment edition dialog"""

    Equipment = Ciclon()

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

        # Calculate tab
        lyt_Calc = QtGui.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Mode")), 0, 1, 1, 2)
        self.tipo_calculo = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_TIPO:
            self.tipo_calculo.addItem(txt)
        self.tipo_calculo.currentIndexChanged.connect(self.on_tipoCalculo_currentIndexChanged)
        lyt_Calc.addWidget(self.tipo_calculo, 0, 3, 1, 4)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Method")), 1, 1, 1, 2)
        self.modelo_rendimiento = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_MODEL:
            self.modelo_rendimiento.addItem(txt)
        self.modelo_rendimiento.currentIndexChanged.connect(partial(self.changeParams, "modelo_rendimiento"))
        lyt_Calc.addWidget(self.modelo_rendimiento, 1, 3, 1, 4)
        lyt_Calc.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "ΔP method", None, QtGui.QApplication.UnicodeUTF8)),
            2,
            1,
            1,
            2,
        )
        self.modelo_DeltaP = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_MODEL_DELTAP:
            self.modelo_DeltaP.addItem(txt)
        self.modelo_DeltaP.currentIndexChanged.connect(partial(self.changeParams, "modelo_DeltaP"))
        lyt_Calc.addWidget(self.modelo_DeltaP, 2, 3, 1, 4)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Design model")), 3, 1, 1, 2)
        self.modelo_ciclon = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_MODEL_CICLON:
            self.modelo_ciclon.addItem(txt)
        self.modelo_ciclon.currentIndexChanged.connect(self.modeloEficiencia_Changed)
        lyt_Calc.addWidget(self.modelo_ciclon, 3, 3, 1, 4)
        lyt_Calc.addItem(QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed), 4, 0, 1, 5)

        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Diameter")), 5, 1)
        self.Dc = Entrada_con_unidades(Length)
        self.Dc.valueChanged.connect(partial(self.changeParams, "Dc"))
        lyt_Calc.addWidget(self.Dc, 5, 2, 1, 2)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Efficiency")), 6, 1)
        self.rendimientoAdmisible = Entrada_con_unidades(float, spinbox=True)
        self.rendimientoAdmisible.valueChanged.connect(partial(self.changeParams, "rendimientoAdmisible"))
        lyt_Calc.addWidget(self.rendimientoAdmisible, 6, 2, 1, 2)
        lyt_Calc.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Allowable ΔP", None, QtGui.QApplication.UnicodeUTF8)
            ),
            7,
            1,
        )
        self.DeltaPAdmisible = Entrada_con_unidades(Pressure)
        self.DeltaPAdmisible.valueChanged.connect(partial(self.changeParams, "DeltaPAdmisible"))
        lyt_Calc.addWidget(self.DeltaPAdmisible, 7, 2, 1, 2)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Allowable speed")), 8, 1)
        self.velocidadAdmisible = Entrada_con_unidades(Speed)
        self.velocidadAdmisible.valueChanged.connect(partial(self.changeParams, "velocidadAdmisible"))
        lyt_Calc.addWidget(self.velocidadAdmisible, 8, 2, 1, 2)
        lyt_Calc.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "No. of ciclones")), 9, 1)
        self.num_ciclones = Entrada_con_unidades(int, spinbox=True, step=1, decimales=0, min=1)
        self.num_ciclones.valueChanged.connect(partial(self.changeParams, "num_ciclones"))
        lyt_Calc.addWidget(self.num_ciclones, 9, 2, 1, 2)
        lyt_Calc.addItem(QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed), 10, 0, 1, 4)

        group = QtGui.QGroupBox(QtGui.QApplication.translate("pychemqt", "Results"))
        lyt_Calc.addWidget(group, 11, 1, 1, 3)
        lyt = QtGui.QGridLayout(group)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Efficiency")), 1, 1)
        self.rendimientoCalc = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.rendimientoCalc, 1, 2)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Pressure drop:")), 2, 1)
        self.deltaP = Entrada_con_unidades(DeltaP, readOnly=True)
        lyt.addWidget(self.deltaP, 2, 2)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Admission speed")), 3, 1)
        self.V = Entrada_con_unidades(Speed, readOnly=True)
        lyt.addWidget(self.V, 3, 2)

        lyt_Calc.addItem(QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed), 5, 4, 7, 1)
        group2 = QtGui.QGroupBox(QtGui.QApplication.translate("pychemqt", "Geometry"))
        lyt_Calc.addWidget(group2, 5, 5, 7, 1)
        lyt = QtGui.QGridLayout(group2)
        lyt.addWidget(QtGui.QLabel("D<sub>C</sub>"), 1, 1)
        self.Dcc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Dcc, 1, 2)
        lyt.addWidget(QtGui.QLabel("B<sub>C</sub>"), 2, 1)
        self.Bc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Bc, 2, 2)
        lyt.addWidget(QtGui.QLabel("H<sub>C</sub>"), 3, 1)
        self.Hc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Hc, 3, 2)
        lyt.addWidget(QtGui.QLabel("J<sub>C</sub>"), 4, 1)
        self.Jc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Jc, 4, 2)
        lyt.addWidget(QtGui.QLabel("L<sub>C</sub>"), 5, 1)
        self.Lc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Lc, 5, 2)
        lyt.addWidget(QtGui.QLabel("Z<sub>C</sub>"), 6, 1)
        self.Zc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Zc, 6, 2)
        lyt.addWidget(QtGui.QLabel("D<sub>e</sub>"), 7, 1)
        self.De = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.De, 7, 2)
        lyt.addWidget(QtGui.QLabel("S<sub>C</sub>"), 8, 1)
        self.Sc = Entrada_con_unidades(Length, boton=False)
        lyt.addWidget(self.Sc, 8, 2)
        lyt.addWidget(QtGui.QLabel("N"), 9, 1)
        self.NCalc = Entrada_con_unidades(int, readOnly=True)
        lyt.addWidget(self.NCalc, 9, 2)
        lyt_Calc.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding), 0, 7, 10, 1
        )
        lyt_Calc.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding), 5, 6, 10, 1
        )

        image = QtGui.QLabel()
        path = os.environ["pychemqt"] + "/images/equip/ciclon.gif"
        image.setPixmap(QtGui.QPixmap(path))
        image.setScaledContents(True)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
        image.setSizePolicy(sizePolicy)
        lyt_Calc.addWidget(image, 0, 8, 12, 1)

        # Cost tab
        lyt_Cost = QtGui.QGridLayout(self.tabCostos)
        lyt_Cost.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Model")), 1, 1)
        self.tipo_costo = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_COST:
            self.tipo_costo.addItem(txt)
        self.tipo_costo.currentIndexChanged.connect(partial(self.changeParamsCoste, "tipo_costo"))
        lyt_Cost.addWidget(self.tipo_costo, 1, 2)
        lyt_Cost.addItem(QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed), 1, 3)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt_Cost.addWidget(self.Costos, 3, 1, 1, 3)
        lyt_Cost.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding), 4, 1, 1, 3
        )

        group = QtGui.QGroupBox(QtGui.QApplication.translate("pychemqt", "Stimated Costs"))
        lyt_Cost.addWidget(group, 5, 1, 1, 3)
        lyt = QtGui.QGridLayout(group)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Number")), 0, 0)
        self.num_ciclonesCoste = Entrada_con_unidades(int, readOnly=True)
        lyt.addWidget(self.num_ciclonesCoste, 0, 1, 1, 3)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Volumetric Flow")), 1, 0)
        self.Q = Entrada_con_unidades(VolFlow, "QGas", retornar=False)
        self.Q.setReadOnly(True)
        lyt.addWidget(self.Q, 1, 1)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Purchase cost")), 0, 3)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False, decimales=2, tolerancia=8)
        self.C_adq.setReadOnly(True)
        lyt.addWidget(self.C_adq, 0, 4)
        lyt.addWidget(QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Installed cost")), 1, 3)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False, decimales=2, tolerancia=8)
        self.C_inst.setReadOnly(True)
        lyt.addWidget(self.C_inst, 1, 4)

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

        self.on_tipoCalculo_currentIndexChanged(0)
        self.modeloEficiencia_Changed(0)
        if equipment:
            self.setEquipment(equipment)

    def on_tipoCalculo_currentIndexChanged(self, int):
        """Habilita o desabilita los datos requeridos para el cálculo"""
        if int and self.modelo_ciclon.count() == 9:
            self.modelo_ciclon.removeItem(8)
        elif not int and self.modelo_ciclon.count() == 8:
            self.modelo_ciclon.addItem(QtGui.QApplication.translate("pychemqt", "Custom"))

        self.Dc.setReadOnly(int)
        self.Dc.setResaltado(not int)
        self.num_ciclones.setReadOnly(int)
        self.num_ciclones.setResaltado(not int)
        self.rendimientoAdmisible.setReadOnly(not int)
        self.rendimientoAdmisible.setResaltado(int)
        self.velocidadAdmisible.setReadOnly(not int)
        self.velocidadAdmisible.setResaltado(False)
        self.DeltaPAdmisible.setReadOnly(not int)
        self.DeltaPAdmisible.setResaltado(False)
        self.changeParams("tipo_calculo", int)

    def modeloEficiencia_Changed(self, modelo):
        if modelo == 8:
            # Customized model, let user edit dimensions values
            self.Hc.setReadOnly(False)
            self.Hc.setResaltado(True)
            self.Bc.setReadOnly(False)
            self.Bc.setResaltado(True)
            self.Jc.setReadOnly(False)
            self.Jc.setResaltado(False)
            self.Lc.setReadOnly(False)
            self.Lc.setResaltado(False)
            self.Zc.setReadOnly(False)
            self.Zc.setResaltado(False)
            self.De.setReadOnly(False)
            self.De.setResaltado(True)
            self.Sc.setReadOnly(False)
            self.Sc.setResaltado(False)
        else:
            self.Hc.setReadOnly(True)
            self.Hc.setResaltado(False)
            self.Bc.setReadOnly(True)
            self.Bc.setResaltado(False)
            self.Jc.setReadOnly(True)
            self.Jc.setResaltado(False)
            self.Lc.setReadOnly(True)
            self.Lc.setResaltado(False)
            self.Zc.setReadOnly(True)
            self.Zc.setResaltado(False)
            self.De.setReadOnly(True)
            self.De.setResaltado(False)
            self.Sc.setReadOnly(True)
            self.Sc.setResaltado(False)
        self.Dcc.setReadOnly(True)
        self.Dcc.setResaltado(False)
        self.changeParams("modelo_ciclon", modelo)
예제 #30
0
class UI_equipment(UI_equip):
    """Electric precipitator equipment edition dialog"""
    Equipment = ElectricPrecipitator()

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

        # Calculate tab
        lyt_Calc = QtWidgets.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Mode")), 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.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            2, 1, 1, 6)

        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Area")), 3, 1)
        self.area = Entrada_con_unidades(Area, resaltado=True)
        self.area.valueChanged.connect(partial(self.changeParams, "area"))
        lyt_Calc.addWidget(self.area, 3, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Allowable efficiency")), 4, 1)
        self.rendimientoAdmisible = Entrada_con_unidades(float,  readOnly=True)
        self.rendimientoAdmisible.valueChanged.connect(
            partial(self.changeParams, "rendimientoAdmisible"))
        lyt_Calc.addWidget(self.rendimientoAdmisible, 4, 2)
        lyt_Calc.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            5, 1, 1, 6)

        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Dielectric constant")), 6, 1)
        self.epsilon = Entrada_con_unidades(float)
        self.epsilon.valueChanged.connect(
            partial(self.changeParams, "epsilon"))
        lyt_Calc.addWidget(self.epsilon, 6, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Charging field")), 7, 1)
        self.potencialCarga = Entrada_con_unidades(PotencialElectric)
        self.potencialCarga.valueChanged.connect(
            partial(self.changeParams, "potencialCarga"))
        lyt_Calc.addWidget(self.potencialCarga, 7, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Collecting field")), 8, 1)
        self.potencialDescarga = Entrada_con_unidades(PotencialElectric)
        self.potencialDescarga.valueChanged.connect(
            partial(self.changeParams, "potencialDescarga"))
        lyt_Calc.addWidget(self.potencialDescarga, 8, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Pressure drop")), 9, 1)
        self.deltaP = Entrada_con_unidades(DeltaP)
        self.deltaP.valueChanged.connect(partial(self.changeParams, "deltaP"))
        lyt_Calc.addWidget(self.deltaP, 9, 2)
        lyt_Calc.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 10, 1, 1, 6)

        groupbox = QtWidgets.QGroupBox(QtWidgets.QApplication.translate(
            "pychemqt", "Result"))
        lyt_Calc.addWidget(groupbox, 11, 1, 1, 5)
        lyt = QtWidgets.QGridLayout(groupbox)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Area")), 0, 1)
        self.areaCalculada = Entrada_con_unidades(Area, retornar=False)
        self.areaCalculada.setReadOnly(True)
        lyt.addWidget(self.areaCalculada, 0, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Efficiency")), 1, 1)
        self.rendimiento = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.rendimiento, 1, 2)
        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"))

        if equipment:
            self.setEquipment(equipment)

    def tipoCalculoCambiado(self, tipo_calculo):
        self.area.setReadOnly(tipo_calculo)
        self.area.setResaltado(not tipo_calculo)
        self.rendimientoAdmisible.setReadOnly(not tipo_calculo)
        self.rendimientoAdmisible.setResaltado(tipo_calculo)
        self.changeParams("metodo", tipo_calculo)
예제 #31
0
class UI_equipment(UI_equip):
    Equipment = Scrubber()
    """Scrubber equipment definition dialog"""
    def __init__(self, equipment=None, parent=None):
        """
        equipment: Initial equipment instance to model
        """
        super().__init__(Scrubber, parent=parent)

        # Input tab
        self.entradaGas = UI_corriente.Ui_corriente(psychro=True)
        self.entradaGas.Changed.connect(
            partial(self.changeParams, "entradaGas"))
        self.Entrada.addTab(
            self.entradaGas,
            QtWidgets.QApplication.translate("equipment", "Gas"))
        self.entradaLiquido = UI_corriente.Ui_corriente()
        self.entradaLiquido.Changed.connect(
            partial(self.changeParams, "entradaLiquido"))
        self.Entrada.addTab(
            self.entradaLiquido,
            QtWidgets.QApplication.translate("pychemqt", "Liquid"))

        # Calculate tab
        gridLayout_Calculo = QtWidgets.QGridLayout(self.tabCalculo)
        gridLayout_Calculo.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Mode")), 1, 1)
        self.tipo_calculo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_TIPO:
            self.tipo_calculo.addItem(txt)
        self.tipo_calculo.currentIndexChanged.connect(
            self.on_tipoCalculo_currentIndexChanged)
        gridLayout_Calculo.addWidget(self.tipo_calculo, 1, 2, 1, 5)
        gridLayout_Calculo.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Method")), 2, 1)
        self.modelo_rendimiento = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MODEL:
            self.modelo_rendimiento.addItem(txt)
        self.modelo_rendimiento.currentIndexChanged.connect(
            self.on_modeloRendimiento_currentIndexChanged)
        gridLayout_Calculo.addWidget(self.modelo_rendimiento, 2, 2, 1, 5)
        gridLayout_Calculo.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "ΔP method")), 3, 1)
        self.modelo_DeltaP = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MODEL_DELTAP:
            self.modelo_DeltaP.addItem(txt)
        self.modelo_DeltaP.currentIndexChanged.connect(
            self.on_modeloDeltaP_currentIndexChanged)
        gridLayout_Calculo.addWidget(self.modelo_DeltaP, 3, 2, 1, 5)

        gridLayout_Calculo.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed,
            QtWidgets.QSizePolicy.Fixed), 4, 1, 1, 6)
        gridLayout_Calculo.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Diameter")), 5, 1)
        self.diametro = Entrada_con_unidades(Length)
        self.diametro.valueChanged.connect(
            partial(self.changeParams, "diametro"))
        gridLayout_Calculo.addWidget(self.diametro, 5, 2)
        gridLayout_Calculo.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 6, 1)
        self.rendimientoAdmisible = Entrada_con_unidades(float, spinbox=True)
        self.rendimientoAdmisible.valueChanged.connect(
            partial(self.changeParams, "rendimientoAdmisible"))
        gridLayout_Calculo.addWidget(self.rendimientoAdmisible, 6, 2)

        self.groupJohnstone = QtWidgets.QWidget()
        gridLayout_Calculo.addWidget(self.groupJohnstone, 7, 1, 1, 2)
        JohnstoneLayout = QtWidgets.QHBoxLayout(self.groupJohnstone)
        JohnstoneLayout.setSpacing(0)
        JohnstoneLayout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Ventury Constant")))
        self.k = Entrada_con_unidades(float, spinbox=True)
        self.k.valueChanged.connect(partial(self.changeParams, "k"))
        JohnstoneLayout.addWidget(self.k)

        self.groupCalvert = QtWidgets.QWidget()
        gridLayout_Calculo.addWidget(self.groupCalvert, 7, 1, 1, 2)
        CalvertLayout = QtWidgets.QHBoxLayout(self.groupCalvert)
        CalvertLayout.setSpacing(0)
        CalvertLayout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "f parameter")))
        self.f = Entrada_con_unidades(float, spinbox=True)
        self.f.valueChanged.connect(partial(self.changeParams, "f"))
        CalvertLayout.addWidget(self.f)

        self.groupLt = QtWidgets.QWidget()
        gridLayout_Calculo.addWidget(self.groupLt, 5, 4, 1, 2)
        LtLayout = QtWidgets.QHBoxLayout(self.groupLt)
        LtLayout.setSpacing(0)
        LtLayout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Length throat")))
        self.Lt = Entrada_con_unidades(Length)
        self.Lt.valueChanged.connect(partial(self.changeParams, "Lt"))
        LtLayout.addWidget(self.Lt)

        gridLayout_Calculo.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 8, 1, 1, 6)
        self.groupBox_Calculo = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        gridLayout_Calculo.addWidget(self.groupBox_Calculo, 9, 1, 1, 5)
        gridLayout_1 = QtWidgets.QGridLayout(self.groupBox_Calculo)
        gridLayout_1.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 1, 1)
        self.rendimiento = Entrada_con_unidades(
            float, retornar=False, readOnly=True)
        gridLayout_1.addWidget(self.rendimiento, 1, 2)
        gridLayout_1.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "DeltaP")), 2, 1)
        self.deltaP = Entrada_con_unidades(
            DeltaP, retornar=False, readOnly=True)
        gridLayout_1.addWidget(self.deltaP, 2, 2)

        gridLayout_Calculo.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 11, 1, 1, 6)

        # Output Tab
        self.SalidaGas = UI_corriente.Ui_corriente(readOnly=True, psychro=True)
        self.Salida.addTab(
            self.SalidaGas,
            QtWidgets.QApplication.translate("pychemqt", "Clean Gas"))
        self.SalidaLiquido = UI_corriente.Ui_corriente(readOnly=True)
        self.Salida.addTab(
            self.SalidaLiquido,
            QtWidgets.QApplication.translate("pychemqt", "Liquid"))

        self.on_tipoCalculo_currentIndexChanged(0)
        self.on_modeloRendimiento_currentIndexChanged(0)
        self.on_modeloDeltaP_currentIndexChanged(0)
        if equipment:
            self.setEquipment(equipment)

    def on_tipoCalculo_currentIndexChanged(self, modelo):
        self.rendimientoAdmisible.setEnabled(modelo)
        self.rendimientoAdmisible.setReadOnly(not modelo)
        self.diametro.setEnabled(not modelo)
        self.diametro.setReadOnly(modelo)
        self.changeParams("tipo_calculo", modelo)

    def on_modeloRendimiento_currentIndexChanged(self, modelo):
        self.groupJohnstone.setVisible(False)
        self.groupCalvert.setVisible(False)
        if modelo == 0:
            self.groupJohnstone.setVisible(True)
        elif modelo == 1:
            self.groupCalvert.setVisible(True)
        self.changeParams("modelo_rendimiento", modelo)

    def on_modeloDeltaP_currentIndexChanged(self, modelo):
        self.groupLt.setVisible(False)
        if modelo in (3, 4):
            self.groupLt.setVisible(True)
        self.changeParams("modelo_DeltaP", modelo)
예제 #32
0
class UI_equipment(UI_equip):
    """Baghouse equipment edition dialog"""
    Equipment = Baghouse()

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

        # Efficiency tab
        title = [QtWidgets.QApplication.translate("pychemqt", "Diameter") +
                 ", " + Length.text("ParticleDiameter"),
                 QtWidgets.QApplication.translate("pychemqt", "Efficiency")]
        self.efic = Tabla(2, horizontalHeader=title, filas=1, stretch=False)
        self.efic.setColumnReadOnly(0, True)
        self.efic.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.efic.editingFinished.connect(self.cambiarRendimientos)
        self.tabWidget.insertTab(
            1, self.efic,
            QtWidgets.QApplication.translate("pychemqt", "Efficiencies"))

        # Calculate tab
        lyt_Calc = QtWidgets.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Mode")), 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, 3)
        lyt_Calc.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            2, 1, 1, 6)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "No cells")), 3, 1)
        self.num_filtros = Entrada_con_unidades(
            int, spinbox=True, step=1, min=1, width=50, resaltado=True,
            start=1)
        self.num_filtros.valueChanged.connect(
            partial(self.changeParams, "num_filtros"))
        lyt_Calc.addWidget(self.num_filtros, 3, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Time")), 4, 1)
        self.tiempo = Entrada_con_unidades(Time, resaltado=True)
        self.tiempo.valueChanged.connect(partial(self.changeParams, "tiempo"))
        lyt_Calc.addWidget(self.tiempo, 4, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Pressure drop")), 5, 1)
        self.deltaP = Entrada_con_unidades(Pressure, retornar=False)
        self.deltaP.setReadOnly(True)
        self.deltaP.valueChanged.connect(partial(self.changeParams, "deltaP"))
        lyt_Calc.addWidget(self.deltaP, 5, 2)
        lyt_Calc.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            6, 1, 1, 6)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Bags per cell")), 7, 1)
        self.membranasFiltro = Entrada_con_unidades(int, spinbox=True, step=1,
                                                    min=1)
        self.membranasFiltro.valueChanged.connect(
            partial(self.changeParams, "membranasFiltro"))
        lyt_Calc.addWidget(self.membranasFiltro, 7, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Bag diameter")), 8, 1)
        self.diametroMembrana = Entrada_con_unidades(Length)
        self.diametroMembrana.valueChanged.connect(
            partial(self.changeParams, "diametroMembrana"))
        lyt_Calc.addWidget(self.diametroMembrana, 8, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Area per bag")), 9, 1)
        self.areaMembrana = Entrada_con_unidades(Area)
        self.areaMembrana.valueChanged.connect(
            partial(self.changeParams, "areaMembrana"))
        lyt_Calc.addWidget(self.areaMembrana, 9, 2)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Cloth resistence")), 7, 4)
        self.resistenciaFiltro = Entrada_con_unidades(float)
        self.resistenciaFiltro.valueChanged.connect(
            partial(self.changeParams, "resistenciaFiltro"))
        lyt_Calc.addWidget(self.resistenciaFiltro, 7, 5)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Cake resistence")), 8, 4)
        self.resistenciaTorta = Entrada_con_unidades(float)
        self.resistenciaTorta.valueChanged.connect(
            partial(self.changeParams, "resistenciaTorta"))
        lyt_Calc.addWidget(self.resistenciaTorta, 8, 5)
        lyt_Calc.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Cells cleaned")), 9, 4)
        self.limpieza = Entrada_con_unidades(int, spinbox=True, step=1, min=0)
        self.limpieza.valueChanged.connect(
            partial(self.changeParams, "limpieza"))
        lyt_Calc.addWidget(self.limpieza, 9, 5)
        lyt_Calc.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 10, 1, 1, 6)

        groupbox = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        lyt_Calc.addWidget(groupbox, 11, 1, 1, 5)
        lyt = QtWidgets.QGridLayout(groupbox)

        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "No cells")), 1, 1)
        self.num_filtrosCalc = Entrada_con_unidades(int, readOnly=True)
        lyt.addWidget(self.num_filtrosCalc, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Time")), 2, 1)
        self.tiempoCalc = Entrada_con_unidades(Time, readOnly=True)
        lyt.addWidget(self.tiempoCalc, 2, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Pressure drop")), 3, 1)
        self.deltaPCalc = Entrada_con_unidades(Pressure, readOnly=True)
        lyt.addWidget(self.deltaPCalc, 3, 2)

        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Gas velocity")), 1, 4)
        self.Vgas = Entrada_con_unidades(Speed, retornar=False, readOnly=True)
        lyt.addWidget(self.Vgas, 1, 5)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Efficiency")), 2, 4)
        self.rendimiento = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.rendimiento, 2, 5)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Area")), 3, 4)
        self.floorArea = Entrada_con_unidades(Area, readOnly=True)
        lyt.addWidget(self.floorArea, 3, 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"))

        if equipment:
            self.setEquipment(equipment)

    def cambiarRendimientos(self):
        self.changeParams("rendimientos", self.efic.getColumn(1))

    def tipoCalculoCambiado(self, tipo_calculo):
        if tipo_calculo == 0:
            self.num_filtros.setReadOnly(False)
            self.num_filtros.setResaltado(True)
            self.tiempo.setReadOnly(False)
            self.tiempo.setResaltado(True)
            self.deltaP.setReadOnly(True)
            self.deltaP.setResaltado(False)
        elif tipo_calculo == 1:
            self.num_filtros.setReadOnly(False)
            self.num_filtros.setResaltado(True)
            self.tiempo.setReadOnly(True)
            self.tiempo.setResaltado(False)
            self.deltaP.setReadOnly(False)
            self.deltaP.setResaltado(True)
        else:
            self.num_filtros.setReadOnly(True)
            self.num_filtros.setResaltado(False)
            self.tiempo.setReadOnly(False)
            self.tiempo.setResaltado(True)
            self.deltaP.setReadOnly(False)
            self.deltaP.setResaltado(True)
        self.changeParams("metodo", tipo_calculo)

    def rellenarInput(self):
        UI_equip.rellenarInput(self)
        if self.Equipment.kwargs["entrada"].solido:
            diametros = []
            for d in self.Equipment.kwargs["entrada"].solido.diametros:
                diametros.append(d.config("ParticleDiameter"))
            self.efic.setColumn(0, diametros)
        if any(self.Equipment.kwargs["rendimientos"]):
            self.efic.setColumn(1, self.Equipment.kwargs["rendimientos"])
예제 #33
0
class UI_equipment(UI_equip):
    """Generic heat exchanger equipment edition dialog"""
    Equipment = Heat_Exchanger()

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

        # Calculate tab
        lyt = QtWidgets.QGridLayout(self.tabCalculo)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Output temperature")), 1, 1)
        self.Tout = Entrada_con_unidades(Temperature)
        self.Tout.valueChanged.connect(partial(self.changeParams, "Tout"))
        lyt.addWidget(self.Tout, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Temperature increase")), 2, 1)
        self.DeltaT = Entrada_con_unidades(DeltaT)
        self.DeltaT.valueChanged.connect(partial(self.changeParams, "DeltaT"))
        lyt.addWidget(self.DeltaT, 2, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Heat Duty")), 3, 1)
        self.Heat = Entrada_con_unidades(Power)
        self.Heat.valueChanged.connect(partial(self.changeParams, "Heat"))
        lyt.addWidget(self.Heat, 3, 2)
        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Heat Transfer"))
        lyt.addWidget(group, 4, 1, 1, 2)
        lyt1 = QtWidgets.QGridLayout(group)
        lyt1.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Area")), 1, 1)
        self.A = Entrada_con_unidades(Area)
        self.A.valueChanged.connect(partial(self.changeParams, "A"))
        lyt1.addWidget(self.A, 1, 2)
        lyt1.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Heat Transfer Coefficient")), 2, 1)
        self.U = Entrada_con_unidades(HeatTransfCoef)
        self.U.valueChanged.connect(partial(self.changeParams, "U"))
        lyt1.addWidget(self.U, 2, 2)
        lyt1.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "External Temperature")), 3, 1)
        self.Text = Entrada_con_unidades(Temperature)
        self.Text.valueChanged.connect(partial(self.changeParams, "Text"))
        lyt1.addWidget(self.Text, 3, 2)

        lyt.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            5, 0, 1, 3)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Pressure loss")), 6, 1)
        self.DeltaP = Entrada_con_unidades(DeltaP, value=0)
        self.DeltaP.valueChanged.connect(partial(self.changeParams, "DeltaP"))
        lyt.addWidget(self.DeltaP, 6, 2)
        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 7, 0, 1, 3)

        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        lyt.addWidget(group, 8, 1, 1, 5)
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Heat Duty")), 0, 1)
        self.HeatCalc = Entrada_con_unidades(Power, retornar=False)
        self.HeatCalc.setReadOnly(True)
        layout.addWidget(self.HeatCalc, 0, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Output Temperature")), 1, 1)
        self.ToutCalc = Entrada_con_unidades(Temperature, retornar=False)
        self.ToutCalc.setReadOnly(True)
        layout.addWidget(self.ToutCalc, 1, 2)

        lyt.addItem(QtWidgets.QSpacerItem(
            0, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            9, 0, 1, 3)

        if equipment:
            self.setEquipment(equipment)

    def changeParams(self, parametro, valor):
        if parametro == "Tout":
            self.Heat.clear()
            self.DeltaT.clear()
        elif parametro == "DeltaT":
            self.Heat.clear()
            self.Tout.clear()
        elif parametro == "Heat":
            self.DeltaT.clear()
            self.Tout.clear()
        self.calculo(**{parametro: valor})
예제 #34
0
class UI_equipment(UI_equip):
    """Flash phase separator equipment edition dialog"""
    Equipment = Flash()

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

        # Calculate tab
        lyt_Calc = QtWidgets.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Method")), 0, 1)
        self.flash = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_FLASH:
            self.flash.addItem(txt)
        self.flash.currentIndexChanged.connect(
            partial(self.changeParams, "metodo"))
        lyt_Calc.addWidget(self.flash, 0, 2)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 1, 1, 1, 6)

        # Cost tab
        lyt_Cost = QtWidgets.QGridLayout(self.tabCostos)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Orientation")),
            0, 1)
        self.orientacion = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_ORIENTATION:
            self.orientacion.addItem(txt)
        self.orientacion.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "orientacion"))
        lyt_Cost.addWidget(self.orientacion, 0, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Material")), 1,
            1)
        self.material = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.material.addItem(txt)
        self.material.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material"))
        lyt_Cost.addWidget(self.material, 1, 2, 1, 4)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Density")), 2, 4)
        self.Densidad = Entrada_con_unidades(Density, "DenLiq")
        self.Densidad.valueChanged.connect(
            partial(self.changeParamsCoste, "densidad"))
        lyt_Cost.addWidget(self.Densidad, 2, 5)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Diameter")), 2,
            1)
        self.diametro = Entrada_con_unidades(Length)
        self.diametro.valueChanged.connect(
            partial(self.changeParamsCoste, "diametro"))
        lyt_Cost.addWidget(self.diametro, 2, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Length")), 3, 1)
        self.longitud = Entrada_con_unidades(Length)
        self.longitud.valueChanged.connect(
            partial(self.changeParamsCoste, "longitud"))
        lyt_Cost.addWidget(self.longitud, 3, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Thickness")), 4,
            1)
        self.espesor = Entrada_con_unidades(Length, "Thickness")
        self.espesor.valueChanged.connect(
            partial(self.changeParamsCoste, "espesor"))
        lyt_Cost.addWidget(self.espesor, 4, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Head type")), 5,
            1)
        self.cabeza = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_HEAD:
            self.cabeza.addItem(txt)
        self.cabeza.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "cabeza"))
        lyt_Cost.addWidget(self.cabeza, 5, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Head Thickness")), 6, 1)
        self.espesor_cabeza = Entrada_con_unidades(Length, "Thickness")
        self.espesor_cabeza.valueChanged.connect(
            partial(self.changeParamsCoste, "espesor_cabeza"))
        lyt_Cost.addWidget(self.espesor_cabeza, 6, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Straight flange length")), 7,
            1)
        self.reborde = Entrada_con_unidades(Length)
        self.reborde.valueChanged.connect(
            partial(self.changeParamsCoste, "reborde"))
        lyt_Cost.addWidget(self.reborde, 7, 2)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Volume")), 6, 4)
        self.Volumen = Entrada_con_unidades(Volume, "VolLiq", retornar=False)
        self.Volumen.setReadOnly(True)
        lyt_Cost.addWidget(self.Volumen, 6, 5)
        lyt_Cost.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Weight")), 7, 4)
        self.Peso = Entrada_con_unidades(Mass, readOnly=True)
        lyt_Cost.addWidget(self.Peso, 7, 5)
        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 2, 3, 6, 1)
        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 8, 0, 1, 6)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt_Cost.addWidget(self.Costos, 9, 1, 2, 5)

        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 11, 0, 1,
            6)
        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Stimated Costs"))
        lyt_Cost.addWidget(group, 12, 1, 1, 5)
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Purchase costs")), 0, 1)
        self.C_adq = Entrada_con_unidades(Currency,
                                          retornar=False,
                                          tolerancia=8,
                                          decimales=2)
        self.C_adq.setReadOnly(True)
        layout.addWidget(self.C_adq, 0, 2)
        layout.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Installed costs")), 1, 1)
        self.C_inst = Entrada_con_unidades(Currency,
                                           retornar=False,
                                           tolerancia=8,
                                           decimales=2)
        self.C_inst.setReadOnly(True)
        layout.addWidget(self.C_inst, 1, 2)
        lyt_Cost.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 13, 0, 1,
            6)

        # Output tab
        self.addSalida(
            QtWidgets.QApplication.translate("pychemqt", "Destilate"))
        self.addSalida(QtWidgets.QApplication.translate("pychemqt", "Residue"))

        if equipment:
            self.setEquipment(equipment)
예제 #35
0
class UI_equipment(UI_equip):
    """Generic heat exchanger equipment edition dialog"""
    Equipment = Heat_Exchanger()

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

        # Calculate tab
        lyt = QtWidgets.QGridLayout(self.tabCalculo)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Output temperature")), 1, 1)
        self.Tout = Entrada_con_unidades(Temperature)
        self.Tout.valueChanged.connect(partial(self.changeParams, "Tout"))
        lyt.addWidget(self.Tout, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Temperature increase")), 2, 1)
        self.DeltaT = Entrada_con_unidades(DeltaT)
        self.DeltaT.valueChanged.connect(partial(self.changeParams, "DeltaT"))
        lyt.addWidget(self.DeltaT, 2, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Heat Duty")), 3, 1)
        self.Heat = Entrada_con_unidades(Power)
        self.Heat.valueChanged.connect(partial(self.changeParams, "Heat"))
        lyt.addWidget(self.Heat, 3, 2)
        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Heat Transfer"))
        lyt.addWidget(group, 4, 1, 1, 2)
        lyt1 = QtWidgets.QGridLayout(group)
        lyt1.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Area")), 1, 1)
        self.A = Entrada_con_unidades(Area)
        self.A.valueChanged.connect(partial(self.changeParams, "A"))
        lyt1.addWidget(self.A, 1, 2)
        lyt1.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Heat Transfer Coefficient")), 2, 1)
        self.U = Entrada_con_unidades(HeatTransfCoef)
        self.U.valueChanged.connect(partial(self.changeParams, "U"))
        lyt1.addWidget(self.U, 2, 2)
        lyt1.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "External Temperature")), 3, 1)
        self.Text = Entrada_con_unidades(Temperature)
        self.Text.valueChanged.connect(partial(self.changeParams, "Text"))
        lyt1.addWidget(self.Text, 3, 2)

        lyt.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            5, 0, 1, 3)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Pressure loss")), 6, 1)
        self.DeltaP = Entrada_con_unidades(DeltaP, value=0)
        self.DeltaP.valueChanged.connect(partial(self.changeParams, "DeltaP"))
        lyt.addWidget(self.DeltaP, 6, 2)
        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 7, 0, 1, 3)

        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        lyt.addWidget(group, 8, 1, 1, 5)
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Heat Duty")), 0, 1)
        self.HeatCalc = Entrada_con_unidades(Power, retornar=False)
        self.HeatCalc.setReadOnly(True)
        layout.addWidget(self.HeatCalc, 0, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Output Temperature")), 1, 1)
        self.ToutCalc = Entrada_con_unidades(Temperature, retornar=False)
        self.ToutCalc.setReadOnly(True)
        layout.addWidget(self.ToutCalc, 1, 2)

        lyt.addItem(QtWidgets.QSpacerItem(
            0, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            9, 0, 1, 3)

        if equipment:
            self.setEquipment(equipment)

    def changeParams(self, parametro, valor):
        if parametro == "Tout":
            self.Heat.clear()
            self.DeltaT.clear()
        elif parametro == "DeltaT":
            self.Heat.clear()
            self.Tout.clear()
        elif parametro == "Heat":
            self.DeltaT.clear()
            self.Tout.clear()
        self.calculo(**{parametro: valor})
예제 #36
0
class UI_equipment(UI_equip):
    """Double pipe heat exchanger edition dialog"""
    Equipment = Hairpin()

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

        # Input tab
        self.addEntrada(QtWidgets.QApplication.translate(
            "pychemqt", "Tube"), "entradaTubo")
        self.addEntrada(QtWidgets.QApplication.translate(
            "pychemqt", "Annulli"), "entradaExterior")

        # Pipe catalog tab
        tabCatalogo = QtWidgets.QWidget()
        self.tabWidget.insertTab(
            1, tabCatalogo,
            QtWidgets.QApplication.translate("pychemqt", "Catalog"))
        lyt = QtWidgets.QGridLayout(tabCatalogo)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Tube length")), 4, 1)
        self.LTube = Entrada_con_unidades(Length)
        self.LTube.valueChanged.connect(partial(self.changeParams, "LTube"))
        lyt.addWidget(self.LTube, 4, 2)
        lyt.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed,
            QtWidgets.QSizePolicy.Fixed), 5, 1)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Tube internal diameter")), 6, 1)
        self.DiTube = Entrada_con_unidades(Length, "pipeDiameter")
        self.DiTube.valueChanged.connect(partial(self.changeParams, "DiTube"))
        lyt.addWidget(self.DiTube, 6, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Tube external diameter")), 7, 1)
        self.DeTube = Entrada_con_unidades(Length, "pipeDiameter")
        self.DeTube.valueChanged.connect(partial(self.changeParams, "DeTube"))
        lyt.addWidget(self.DeTube, 7, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Tube thickness")), 8, 1)
        self.wTube = Entrada_con_unidades(Length, "Thickness")
        self.wTube.valueChanged.connect(partial(self.changeParams, "wTube"))
        lyt.addWidget(self.wTube, 8, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Tube roughness")), 9, 1)
        self.rTube = Entrada_con_unidades(Length, "Thickness")
        self.rTube.valueChanged.connect(partial(self.changeParams, "rTube"))
        lyt.addWidget(self.rTube, 9, 2)
        lyt.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed,
            QtWidgets.QSizePolicy.Fixed), 10, 1)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Annulli external diameter")), 11, 1)
        self.DeeTube = Entrada_con_unidades(Length, "pipeDiameter")
        self.DeeTube.valueChanged.connect(
            partial(self.changeParams, "DeeTube"))
        lyt.addWidget(self.DeeTube, 11, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Thermal conductivity")), 12, 1)
        self.kTube = Entrada_con_unidades(ThermalConductivity)
        self.kTube.valueChanged.connect(partial(self.changeParams, "kTube"))
        lyt.addWidget(self.kTube, 12, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Tube Count")), 13, 1)
        self.nTube = Entrada_con_unidades(int)
        self.nTube.valueChanged.connect(partial(self.changeParams, "nTube"))
        lyt.addWidget(self.nTube, 13, 2)

        buttonPipe = QtWidgets.QPushButton(
            QtWidgets.QApplication.translate("pychemqt", "Pipe Database"))
        buttonPipe.clicked.connect(self.showMaterial)
        lyt.addWidget(buttonPipe, 6, 3, 4, 1)
        lyt.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed,
            QtWidgets.QSizePolicy.Fixed), 14, 1)
        self.tubeFinned = QtWidgets.QCheckBox(
            QtWidgets.QApplication.translate("pychemqt", "Finned Tube"))
        lyt.addWidget(self.tubeFinned, 15, 1, 1, 4)
        self.buttonFin = QtWidgets.QPushButton(
            QtWidgets.QApplication.translate(
                "pychemqt", "Finned Pipe Database"))
        self.buttonFin.setEnabled(False)
        self.buttonFin.clicked.connect(self.showFinTube)
        lyt.addWidget(self.buttonFin, 15, 3)
        self.tubeFinned.toggled.connect(
            partial(self.changeParams, "tubeFinned"))
        self.tubeFinned.toggled.connect(self.buttonFin.setEnabled)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Inside Fouling")), 16, 1)
        self.tubeFouling = FoulingWidget()
        self.tubeFouling.valueChanged.connect(
            partial(self.changeParams, "tubeFouling"))
        lyt.addWidget(self.tubeFouling, 16, 2, 1, 5)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Outside Fouling")), 17, 1)
        self.annulliFouling = FoulingWidget()
        self.annulliFouling.valueChanged.connect(
            partial(self.changeParams, "annulliFouling"))
        lyt.addWidget(self.annulliFouling, 17, 2, 1, 5)
        lyt.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 20, 1, 1, 6)

        # Calculate tab
        lyt = QtWidgets.QGridLayout(self.tabCalculo)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Mode")), 1, 1)
        self.modo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MODO:
            self.modo.addItem(txt)
        self.modo.currentIndexChanged.connect(
            partial(self.changeParams, "modo"))
        lyt.addWidget(self.modo, 1, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Flujo")), 2, 1)
        self.flujo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_FLUJO:
            self.flujo.addItem(txt)
        self.flujo.currentIndexChanged.connect(
            partial(self.changeParams, "flujo"))
        lyt.addWidget(self.flujo, 2, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Layout")), 3, 1)
        self.orientacion = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_ORIENTACION:
            self.orientacion.addItem(txt)
        self.orientacion.currentIndexChanged.connect(
            partial(self.changeParams, "orientacion"))
        lyt.addWidget(self.orientacion, 3, 2)

        lyt.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed,
            QtWidgets.QSizePolicy.Fixed), 4, 1)

        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Output inside temperature")), 5, 1)
        self.tubeTout = Entrada_con_unidades(Temperature)
        self.tubeTout.valueChanged.connect(
            partial(self.changeParams, "tubeTout"))
        lyt.addWidget(self.tubeTout, 5, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Output annulli temperature")), 6, 1)
        self.annulliTout = Entrada_con_unidades(Temperature)
        self.annulliTout.valueChanged.connect(
            partial(self.changeParams, "annulliTout"))
        lyt.addWidget(self.annulliTout, 6, 2)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Output inside quality")), 5, 4)
        self.tubeXout = Entrada_con_unidades(float)
        self.tubeXout.valueChanged.connect(
            partial(self.changeParams, "tubeXout"))
        lyt.addWidget(self.tubeXout, 5, 5)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Output annulli quality")), 6, 4)
        self.annulliXout = Entrada_con_unidades(float)
        self.annulliXout.valueChanged.connect(
            partial(self.changeParams, "annulliXout"))
        lyt.addWidget(self.annulliXout, 6, 5)

        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 15, 1, 1, 6)

        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        lyt.addWidget(group, 16, 1, 1, 6)
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Heat Duty")), 0, 1)
        self.Q = Entrada_con_unidades(Power, retornar=False, readOnly=True)
        layout.addWidget(self.Q, 0, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Tout Tube")), 1, 1)
        self.ToutTube = Entrada_con_unidades(Temperature, retornar=False)
        self.ToutTube.setReadOnly(True)
        layout.addWidget(self.ToutTube, 1, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Tout Tube")), 2, 1)
        self.ToutAnnulli = Entrada_con_unidades(Temperature, retornar=False)
        self.ToutAnnulli.setReadOnly(True)
        layout.addWidget(self.ToutAnnulli, 2, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "U")), 0, 4)
        self.U = Entrada_con_unidades(HeatTransfCoef, retornar=False)
        self.U.setReadOnly(True)
        layout.addWidget(self.U, 0, 5)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Area")), 1, 4)
        self.A = Entrada_con_unidades(Area, retornar=False, readOnly=True)
        layout.addWidget(self.A, 1, 5)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Lenght")), 2, 4)
        self.L = Entrada_con_unidades(Length, retornar=False, readOnly=True)
        layout.addWidget(self.L, 2, 5)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "DeltaP Tube")), 0, 7)
        self.deltaPTube = Entrada_con_unidades(DeltaP, retornar=False)
        self.deltaPTube.setReadOnly(True)
        layout.addWidget(self.deltaPTube, 0, 8)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "DeltaP Annulli")), 1, 7)
        self.deltaPAnnulli = Entrada_con_unidades(DeltaP, retornar=False)
        self.deltaPAnnulli.setReadOnly(True)
        layout.addWidget(self.deltaPAnnulli, 1, 8)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "CF")), 2, 7)
        self.CF = Entrada_con_unidades(float, retornar=False, readOnly=True)
        layout.addWidget(self.CF, 2, 8)

        lyt.addItem(QtWidgets.QSpacerItem(
            0, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            17, 1, 1, 6)

        # Cost tab
        lyt = QtWidgets.QGridLayout(self.tabCostos)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Material")), 2, 1)
        self.material = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.material.addItem(txt)
        self.material.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material"))
        lyt.addWidget(self.material, 2, 2)
        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 3, 0, 1, 6)
        lyt.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Design Pressure")), 4, 1)
        self.P_dis = Entrada_con_unidades(Pressure)
        self.P_dis.valueChanged.connect(
            partial(self.changeParamsCoste, "P_dis"))
        lyt.addWidget(self.P_dis, 4, 2, 1, 1)
        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 5, 0, 1, 6)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt.addWidget(self.Costos, 6, 1, 2, 5)

        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 8, 0, 1, 6)
        lyt.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 10, 0, 1, 6)
        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Stimated Costs"))
        lyt.addWidget(group, 9, 1, 1, 5)
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Purchase Cost")), 0, 1)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        layout.addWidget(self.C_adq, 0, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Installed Cost")), 1, 1)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        self.C_inst.entrada.setReadOnly(True)
        layout.addWidget(self.C_inst, 1, 2)

        # Output Tab
        self.addSalida(QtWidgets.QApplication.translate("pychemqt", "Tube"))
        self.addSalida(QtWidgets.QApplication.translate("pychemqt", "Annulli"))

        if equipment:
            self.setEquipment(equipment)

    def showMaterial(self):
        dialogo = Catalogo_Materiales_Dialog()
        if dialogo.exec_():
            material = dialogo.getMaterial()
            if material:
                self.rTube.setValue(material[2])
                self.DiTube.setValue(material[4])
                self.wTube.setValue(material[5])
                self.DeTube.setValue(material[6])

    def showFinTube(self):
        dialogo = Dialog_Finned(self.Equipment.kwargs)
        if dialogo.exec_():
            kwarg = dialogo.kwarg()
            self.calculo(**kwarg)
예제 #37
0
class UI_equipment (UI_equip):
    """Flash phase separator equipment edition dialog"""
    Equipment = Flash()

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

        # Calculate tab
        lyt_Calc = QtWidgets.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Method")), 0, 1)
        self.flash = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_FLASH:
            self.flash.addItem(txt)
        self.flash.currentIndexChanged.connect(
            partial(self.changeParams, "metodo"))
        lyt_Calc.addWidget(self.flash, 0, 2)
        lyt_Calc.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding),
            1, 1, 1, 6)

        # Cost tab
        lyt_Cost = QtWidgets.QGridLayout(self.tabCostos)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Orientation")), 0, 1)
        self.orientacion = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_ORIENTATION:
            self.orientacion.addItem(txt)
        self.orientacion.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "orientacion"))
        lyt_Cost.addWidget(self.orientacion, 0, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Material")), 1, 1)
        self.material = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.material.addItem(txt)
        self.material.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material"))
        lyt_Cost.addWidget(self.material, 1, 2, 1, 4)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Density")), 2, 4)
        self.Densidad = Entrada_con_unidades(Density, "DenLiq")
        self.Densidad.valueChanged.connect(
            partial(self.changeParamsCoste, "densidad"))
        lyt_Cost.addWidget(self.Densidad, 2, 5)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Diameter")), 2, 1)
        self.diametro = Entrada_con_unidades(Length)
        self.diametro.valueChanged.connect(
            partial(self.changeParamsCoste, "diametro"))
        lyt_Cost.addWidget(self.diametro, 2, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Length")), 3, 1)
        self.longitud = Entrada_con_unidades(Length)
        self.longitud.valueChanged.connect(
            partial(self.changeParamsCoste, "longitud"))
        lyt_Cost.addWidget(self.longitud, 3, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Thickness")), 4, 1)
        self.espesor = Entrada_con_unidades(Length, "Thickness")
        self.espesor.valueChanged.connect(
            partial(self.changeParamsCoste, "espesor"))
        lyt_Cost.addWidget(self.espesor, 4, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Head type")), 5, 1)
        self.cabeza = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_HEAD:
            self.cabeza.addItem(txt)
        self.cabeza.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "cabeza"))
        lyt_Cost.addWidget(self.cabeza, 5, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Head Thickness")), 6, 1)
        self.espesor_cabeza = Entrada_con_unidades(Length, "Thickness")
        self.espesor_cabeza.valueChanged.connect(
            partial(self.changeParamsCoste, "espesor_cabeza"))
        lyt_Cost.addWidget(self.espesor_cabeza, 6, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Straight flange length")), 7, 1)
        self.reborde = Entrada_con_unidades(Length)
        self.reborde.valueChanged.connect(
            partial(self.changeParamsCoste, "reborde"))
        lyt_Cost.addWidget(self.reborde, 7, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Volume")), 6, 4)
        self.Volumen = Entrada_con_unidades(Volume, "VolLiq", retornar=False)
        self.Volumen.setReadOnly(True)
        lyt_Cost.addWidget(self.Volumen, 6, 5)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Weight")), 7, 4)
        self.Peso = Entrada_con_unidades(Mass, readOnly=True)
        lyt_Cost.addWidget(self.Peso, 7, 5)
        lyt_Cost.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            2, 3, 6, 1)
        lyt_Cost.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding),
            8, 0, 1, 6)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt_Cost.addWidget(self.Costos, 9, 1, 2, 5)

        lyt_Cost.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding),
            11, 0, 1, 6)
        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Stimated Costs"))
        lyt_Cost.addWidget(group, 12, 1, 1, 5)
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Purchase costs")), 0, 1)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False,
                                          tolerancia=8, decimales=2)
        self.C_adq.setReadOnly(True)
        layout.addWidget(self.C_adq, 0, 2)
        layout.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Installed costs")), 1, 1)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False,
                                           tolerancia=8, decimales=2)
        self.C_inst.setReadOnly(True)
        layout.addWidget(self.C_inst, 1, 2)
        lyt_Cost.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding),
            13, 0, 1, 6)

        # Output tab
        self.addSalida(QtWidgets.QApplication.translate("pychemqt", "Destilate"))
        self.addSalida(QtWidgets.QApplication.translate("pychemqt", "Residue"))

        if equipment:
            self.setEquipment(equipment)
예제 #38
0
class PsychroInput(QtWidgets.QWidget):
    """Widget with parameter for psychrometric state"""
    parameters = ["tdb", "twb", "tdp", "w", "HR", "v", "h"]
    stateChanged = QtCore.pyqtSignal(PsyState)
    pressureChanged = QtCore.pyqtSignal()

    def __init__(self, state=None, readOnly=False, parent=None):
        """
        constructor
        optional state parameter to assign initial psychrometric state
        """
        super(PsychroInput, self).__init__(parent)

        self.state = PsychroState(P=101325)

        layout = QtWidgets.QGridLayout(self)
        self.checkPresion = QtWidgets.QRadioButton(
            QtWidgets.QApplication.translate("pychemqt", "Pressure"))
        layout.addWidget(self.checkPresion, 1, 1, 1, 1)
        self.P = Entrada_con_unidades(Pressure, value=101325)
        self.P.valueChanged.connect(self.changePressure)
        layout.addWidget(self.P, 1, 2, 1, 1)
        self.checkAltitud = QtWidgets.QRadioButton(
            QtWidgets.QApplication.translate("pychemqt", "Altitude"))
        layout.addWidget(self.checkAltitud, 2, 1, 1, 1)
        self.z = Entrada_con_unidades(Length, value=0)
        self.checkPresion.toggled.connect(self.P.setEnabled)
        self.checkAltitud.toggled.connect(self.z.setEnabled)
        self.z.valueChanged.connect(self.changeAltitude)
        self.checkPresion.setChecked(True)
        self.z.setEnabled(False)
        layout.addWidget(self.z, 2, 2, 1, 1)
        layout.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            3, 1, 1, 2)

        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Select point")), 4, 1, 1, 2)
        self.variables = QtWidgets.QComboBox()
        for txt in PsyState.TEXT_MODE:
            self.variables.addItem(txt)
        self.variables.currentIndexChanged.connect(self.updateInputs)
        layout.addWidget(self.variables, 5, 1, 1, 2)

        layout.addWidget(QtWidgets.QLabel("Tdb:"), 6, 1, 1, 1)
        self.tdb = Entrada_con_unidades(Temperature)
        self.tdb.valueChanged.connect(partial(self.updateKwargs, "tdb"))
        layout.addWidget(self.tdb, 6, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel("Twb:"), 7, 1, 1, 1)
        self.twb = Entrada_con_unidades(Temperature)
        self.twb.valueChanged.connect(partial(self.updateKwargs, "twb"))
        layout.addWidget(self.twb, 7, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel("Tdp:"), 8, 1, 1, 1)
        self.tdp = Entrada_con_unidades(Temperature)
        self.tdp.valueChanged.connect(partial(self.updateKwargs, "tdp"))
        layout.addWidget(self.tdp, 8, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Humidity Ratio:")), 9, 1, 1, 1)
        self.w = Entrada_con_unidades(float, textounidad="kgw/kgda")
        self.w.valueChanged.connect(partial(self.updateKwargs, "w"))
        layout.addWidget(self.w, 9, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Relative humidity:")), 10, 1, 1, 1)
        self.HR = Entrada_con_unidades(float, textounidad="%")
        self.HR.valueChanged.connect(partial(self.updateKwargs, "HR"))
        layout.addWidget(self.HR, 10, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Volume")), 11, 1, 1, 1)
        self.v = Entrada_con_unidades(SpecificVolume)
        self.v.valueChanged.connect(partial(self.updateKwargs, "v"))
        layout.addWidget(self.v, 11, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Enthalpy")), 12, 1, 1, 1)
        self.h = Entrada_con_unidades(Enthalpy)
        self.h.valueChanged.connect(partial(self.updateKwargs, "h"))
        layout.addWidget(self.h, 12, 2, 1, 1)
        layout.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed),
            13, 1, 1, 2)

        self.setReadOnly(readOnly)
        self.updateInputs(0)
        if state:
            self.setState(state)

    def updateInputs(self, index):
        """Update inputs appearance to highlight active"""
        for par in self.parameters:
            self.__getattribute__(par).setReadOnly(True)
            self.__getattribute__(par).setResaltado(False)
        for par in PsyState.VAR_NAME[index]:
            self.__getattribute__(par).setReadOnly(False)
            self.__getattribute__(par).setResaltado(True)

        index = self.variables.currentIndex()
        kwargs = {"P": self.P.value}
        for par in PsyState.VAR_NAME[index]:
            if self.__getattribute__(par).value:
                kwargs[par] = self.state.__getattribute__(par)
        self.state = PsychroState(**kwargs)

    def setReadOnly(self, readOnly):
        self.checkPresion.setEnabled(not readOnly)
        self.checkAltitud.setEnabled(not readOnly)
        self.P.setReadOnly(readOnly)
        self.z.setReadOnly(readOnly)
        self.variables.setEnabled(not readOnly)
        for par in self.parameters:
            self.__getattribute__(par).setReadOnly(True)
            self.__getattribute__(par).setResaltado(False)

    def updateKwargs(self, key, value):
        """Update kwargs of state instance, if its correctly defined show it"""
        kwargs = {key: value}
        self.state(**kwargs)
        if self.state.status:
            self.setState(self.state)
            self.stateChanged.emit(self.state)

    def setState(self, state):
        """Fill data input with state properties"""
        self.state = state
        if state.w < state.ws:
            for p in self.parameters:
                self.__getattribute__(p).setValue(state.__getattribute__(p))

    def changePressure(self, value):
        """Change pressure to global plot and for states"""
        self.z.setValue(_height(value))
        self.state = PsychroState(P=value)
        self.pressureChanged.emit()

    def changeAltitude(self, value):
        """Change pressure through altitude and ICAO equation"""
        presion = _Pbar(value)
        self.P.setValue(presion)
        self.state = PsychroState(P=value)
        self.pressureChanged.emit()
예제 #39
0
class PsychroInput(QtWidgets.QWidget):
    """Widget with parameter for psychrometric state"""
    parameters = ["tdb", "twb", "tdp", "w", "HR", "v", "h"]
    stateChanged = QtCore.pyqtSignal(PsyState)
    pressureChanged = QtCore.pyqtSignal()

    def __init__(self, state=None, readOnly=False, parent=None):
        """
        constructor
        optional state parameter to assign initial psychrometric state"""
        super(PsychroInput, self).__init__(parent)

        self.state = PsychroState(P=101325)
        self.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)

        layout = QtWidgets.QGridLayout(self)
        self.checkPresion = QtWidgets.QRadioButton(
                QtWidgets.QApplication.translate("pychemqt", "Pressure"))
        layout.addWidget(self.checkPresion, 1, 1, 1, 1)
        self.P = Entrada_con_unidades(unidades.Pressure, value=101325)
        self.P.valueChanged.connect(self.changePressure)
        layout.addWidget(self.P, 1, 2, 1, 1)
        self.checkAltitud = QtWidgets.QRadioButton(
                QtWidgets.QApplication.translate("pychemqt", "Altitude"))
        layout.addWidget(self.checkAltitud, 2, 1, 1, 1)
        self.z = Entrada_con_unidades(unidades.Length, value=0)
        self.checkPresion.toggled.connect(self.P.setEnabled)
        self.checkAltitud.toggled.connect(self.z.setEnabled)
        self.z.valueChanged.connect(self.changeAltitude)
        self.checkPresion.setChecked(True)
        self.z.setEnabled(False)
        layout.addWidget(self.z, 2, 2, 1, 1)
        layout.addItem(QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                         QtWidgets.QSizePolicy.Fixed), 3, 1, 1, 2)

        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Select point")), 4, 1, 1, 2)
        self.variables = QtWidgets.QComboBox()
        for txt in PsyState.TEXT_MODE:
            self.variables.addItem(txt)
        self.variables.currentIndexChanged.connect(self.updateInputs)
        layout.addWidget(self.variables, 5, 1, 1, 2)

        layout.addWidget(QtWidgets.QLabel("Tdb:"), 6, 1, 1, 1)
        self.tdb = Entrada_con_unidades(unidades.Temperature)
        self.tdb.valueChanged.connect(partial(self.updateKwargs, "tdb"))
        layout.addWidget(self.tdb, 6, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel("Twb:"), 7, 1, 1, 1)
        self.twb = Entrada_con_unidades(unidades.Temperature)
        self.twb.valueChanged.connect(partial(self.updateKwargs, "twb"))
        layout.addWidget(self.twb, 7, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel("Tdp:"), 8, 1, 1, 1)
        self.tdp = Entrada_con_unidades(unidades.Temperature)
        self.tdp.valueChanged.connect(partial(self.updateKwargs, "tdp"))
        layout.addWidget(self.tdp, 8, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Humidity Ratio:")), 9, 1, 1, 1)
        self.w = Entrada_con_unidades(float, textounidad="kgw/kgda")
        self.w.valueChanged.connect(partial(self.updateKwargs, "w"))
        layout.addWidget(self.w, 9, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Relative humidity:")), 10, 1, 1, 1)
        self.HR = Entrada_con_unidades(float, textounidad="%")
        self.HR.valueChanged.connect(partial(self.updateKwargs, "HR"))
        layout.addWidget(self.HR, 10, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Volume")), 11, 1, 1, 1)
        self.v = Entrada_con_unidades(unidades.SpecificVolume)
        self.v.valueChanged.connect(partial(self.updateKwargs, "v"))
        layout.addWidget(self.v, 11, 2, 1, 1)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Enthalpy")), 12, 1, 1, 1)
        self.h = Entrada_con_unidades(unidades.Enthalpy)
        self.h.valueChanged.connect(partial(self.updateKwargs, "h"))
        layout.addWidget(self.h, 12, 2, 1, 1)
        layout.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                         QtWidgets.QSizePolicy.Fixed),13,1,1,2)

        self.setReadOnly(readOnly)
        self.updateInputs(0)
        if state:
            self.setState(state)

    def updateInputs(self, index):
        """Update inputs appearance to highlight active"""
        for par in self.parameters:
            self.__getattribute__(par).setReadOnly(True)
            self.__getattribute__(par).setResaltado(False)
        for par in PsyState.VAR_NAME[index]:
            self.__getattribute__(par).setReadOnly(False)
            self.__getattribute__(par).setResaltado(True)

        index = self.variables.currentIndex()
        kwargs = {"P": self.P.value}
        for par in PsyState.VAR_NAME[index]:
            if self.__getattribute__(par).value:
                kwargs[par] = self.state.__getattribute__(par)
        self.state = PsychroState(**kwargs)

    def setReadOnly(self, readOnly):
        self.checkPresion.setEnabled(not readOnly)
        self.checkAltitud.setEnabled(not readOnly)
        self.P.setReadOnly(readOnly)
        self.z.setReadOnly(readOnly)
        self.variables.setEnabled(not readOnly)
        for par in self.parameters:
            self.__getattribute__(par).setReadOnly(True)
            self.__getattribute__(par).setResaltado(False)

    def updateKwargs(self, key, value):
        """Update kwargs of state instance, if its correctly defined show it"""
        kwargs = {key: value}
        self.state(**kwargs)
        if self.state.status:
            self.setState(self.state)
            self.stateChanged.emit(self.state)

    def setState(self, state):
        """Fill data input with state properties"""
        self.state = state
        if state.w < state.ws:
            for par in self.parameters:
                self.__getattribute__(par).setValue(state.__getattribute__(par))

    def changePressure(self, value):
        """Change pressure to global plot and for states"""
        self.z.setValue(_height(value))
        self.state = PsychroState(P=value)
        self.pressureChanged.emit()

    def changeAltitude(self, value):
        """Change pressure through altitude and ICAO equation"""
        presion = _Pbar(value)
        self.P.setValue(presion)
        self.state = PsychroState(P=value)
        self.pressureChanged.emit()
예제 #40
0
class UI_equipment(UI_equip):
    """Fireheater equipment edition dialog"""
    Equipment = Fired_Heater()

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

        # Calculate tab
        layout = QtWidgets.QGridLayout(self.tabCalculo)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Output Temperature")), 1, 1)
        self.Tout = Entrada_con_unidades(Temperature, resaltado=True)
        self.Tout.valueChanged.connect(partial(self.changeParams, "Tout"))
        layout.addWidget(self.Tout, 1, 2)
        layout.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy. Fixed, QtWidgets.QSizePolicy.Fixed),
            2, 0, 1, 6)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Pressure drop")), 3, 1)
        self.deltaP = Entrada_con_unidades(Pressure)
        self.deltaP.valueChanged.connect(partial(self.changeParams, "deltaP"))
        layout.addWidget(self.deltaP, 3, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Maximum heat flux")), 4, 1)
        self.Hmax = Entrada_con_unidades(Power)
        self.Hmax.valueChanged.connect(partial(self.changeParams, "Hmax"))
        layout.addWidget(self.Hmax, 4, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Fuel calorific value")), 5, 1)
        self.poderCalorifico = Entrada_con_unidades(float)
        self.poderCalorifico.valueChanged.connect(
            partial(self.changeParams, "poderCalorifico"))
        layout.addWidget(self.poderCalorifico, 5, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Efficiency")), 6, 1)
        self.eficiencia = Entrada_con_unidades(float, spinbox=True)
        self.eficiencia.valueChanged.connect(
            partial(self.changeParams, "eficiencia"))
        layout.addWidget(self.eficiencia, 6, 2)
        layout.addItem(QtWidgets.QSpacerItem(
            10, 10, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 7, 0, 1, 6)

        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        layout.addWidget(group, 8, 1, 1, 5)
        lyt = QtWidgets.QGridLayout(group)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Heat")), 0, 1)
        self.Heat = Entrada_con_unidades(Power, retornar=False, readOnly=True)
        lyt.addWidget(self.Heat, 0, 2)
        lyt.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Fuel")), 1, 1)
        self.CombustibleRequerido = Entrada_con_unidades(
            VolFlow, "QLiq", retornar=False, readOnly=True)
        lyt.addWidget(self.CombustibleRequerido, 1, 2)
        layout.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed,
            QtWidgets.QSizePolicy.Fixed), 9, 0, 1, 6)

        # Cost tab
        lyt_Cost = QtWidgets.QGridLayout(self.tabCostos)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Type")), 1, 1)
        self.tipo = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_TIPO:
            self.tipo.addItem(txt)
        self.tipo.currentIndexChanged.connect(self.mostrarSubclasificacion)
        lyt_Cost.addWidget(self.tipo, 1, 2)
        self.label = QtWidgets.QLabel()
        lyt_Cost.addWidget(self.label, 2, 1)
        self.subtipoBox = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_SUBTIPOBOX:
            self.subtipoBox.addItem(txt)
        self.subtipoBox.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "subtipoBox"))
        lyt_Cost.addWidget(self.subtipoBox, 2, 2)
        self.subtipoCylindrical = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_SUBTIPOCYLINDRICAL:
            self.subtipoCylindrical.addItem(txt)
        self.subtipoCylindrical.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "subtipoCylindrical"))
        lyt_Cost.addWidget(self.subtipoCylindrical, 2, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(
            QtWidgets.QApplication.translate("pychemqt", "Material")), 3, 1)
        self.material = QtWidgets.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.material.addItem(txt)
        self.material.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material"))
        lyt_Cost.addWidget(self.material, 3, 2)
        lyt_Cost.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Design pressure")), 4, 1)
        self.P_dis = Entrada_con_unidades(Pressure)
        self.P_dis.valueChanged.connect(
            partial(self.changeParamsCoste, "P_dis"))
        lyt_Cost.addWidget(self.P_dis, 4, 2)
        lyt_Cost.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 5, 1, 1, 6)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt_Cost.addWidget(self.Costos, 6, 1, 2, 5)

        lyt_Cost.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Expanding,
            QtWidgets.QSizePolicy.Expanding), 8, 1, 1, 6)
        group = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Stimated Costs"))
        lyt_Cost.addWidget(group, 9, 1, 1, 6)
        layout = QtWidgets.QGridLayout(group)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Purchase costs")), 0, 1)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        layout.addWidget(self.C_adq, 0, 2)
        layout.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate(
            "pychemqt", "Installed costs")), 1, 1)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        layout.addWidget(self.C_inst, 1, 2)
        lyt_Cost.addItem(QtWidgets.QSpacerItem(
            20, 20, QtWidgets.QSizePolicy.Fixed,
            QtWidgets.QSizePolicy.Fixed), 10, 1, 1, 6)

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

    def mostrarSubclasificacion(self, ind):
        if ind:
            txt = QtWidgets.QApplication.translate(
                "pychemqt", "Cylindrical heater type")
        else:
            txt = QtWidgets.QApplication.translate(
                "pychemqt", "Box heater type")
        self.label.setText(txt)
        self.subtipoBox.setVisible(not ind)
        self.subtipoCylindrical.setVisible(ind)
        self.changeParamsCoste("tipo", ind)
예제 #41
0
class UI_equipment(parents.UI_equip):
    """Diálogo de definición de cristalizadores"""
    def __init__(self, entrada=None, parent=None):
        """entrada: Parametro opcional de clase corriente que indica la corriente de entrada en el equipo"""
        super(UI_equipment, self).__init__(Crystallizer, 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 calculo
        gridLayout_Calculo = QtWidgets.QGridLayout(self.tabCalculo)

        #Pestaña costos
        gridLayout_Costos = QtWidgets.QGridLayout(self.tabCostos)
        gridLayout_Costos.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("equipment", "Tipo:", None)), 1, 1)
        self.tipo=QtWidgets.QComboBox()
        self.tipo.addItem(QtWidgets.QApplication.translate("equipment", "Recirculación externa forzada", None))
        self.tipo.addItem(QtWidgets.QApplication.translate("equipment", "Internos de tubo forzado", None))
        self.tipo.addItem(QtWidgets.QApplication.translate("equipment", "Discontinuos a vacío", None))
        self.tipo.currentIndexChanged.connect(self.mostrarSubclasificacion)
        self.tipo.currentIndexChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.tipo, 1, 2, 1, 3)
        gridLayout_Costos.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("equipment", "Material:", None)), 2, 1)
        self.materialvacio=QtWidgets.QComboBox()
        self.materialvacio.addItem(QtWidgets.QApplication.translate("equipment", "Acero dulce", None))
        self.materialvacio.addItem(QtWidgets.QApplication.translate("equipment", "Acero recubierto de caucho", None))
        self.materialvacio.addItem(QtWidgets.QApplication.translate("equipment", "Acero inoxidable 304", None))
        self.materialvacio.currentIndexChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.materialvacio, 2, 2, 1, 3)
        self.materialotros=QtWidgets.QComboBox()
        self.materialotros.addItem(QtWidgets.QApplication.translate("equipment", "Acero dulce", None))
        self.materialotros.addItem(QtWidgets.QApplication.translate("equipment", "Acero inoxidable 304", None))
        self.materialotros.currentIndexChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.materialotros, 2, 2, 1, 3)
        gridLayout_Costos.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("equipment", "Volumen:", None)), 4, 4)
        self.Volumen=Entrada_con_unidades(unidades.Volume, "VolLiq", width=80)
        gridLayout_Costos.addWidget(self.Volumen,4,5,1,1)
        gridLayout_Costos.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Fixed),3,0,1,6)
        self.label4=QtWidgets.QLabel()
        self.label4.setText(QtWidgets.QApplication.translate("equipment", "Caudal calculado:", None))
        gridLayout_Costos.addWidget(self.label4, 4, 1, 1, 1)
        self.caudalcalculado=Entrada_con_unidades(unidades.MassFlow, readOnly=True, retornar=False)
        gridLayout_Costos.addWidget(self.caudalcalculado,4,2,1,1)
        gridLayout_Costos.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("equipment", "Caudal de diseño:", None)), 5, 1)
        self.caudaldiseno=Entrada_con_unidades(unidades.MassFlow)
        gridLayout_Costos.addWidget(self.caudaldiseno,5,2,1,1)
        gridLayout_Costos.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Fixed),6,0,1,6)

        self.Costos=costIndex.CostData(1.9, 2)
        self.Costos.valueChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.Costos,7,1,2,5)

        gridLayout_Costos.addItem(QtWidgets.QSpacerItem(20,20,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding),11,0,1,6)
        gridLayout_Costos.addItem(QtWidgets.QSpacerItem(20,20,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding),9,0,1,6)
        self.groupBox_Costos = QtWidgets.QGroupBox(QtWidgets.QApplication.translate("equipment", "Costos calculados", None))
        gridLayout_Costos.addWidget(self.groupBox_Costos,10,1,1,5)
        gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_Costos)
        gridLayout_5.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("equipment", "Coste Adquisición:", None)),0,1,1,1)
        self.C_adq=Entrada_con_unidades(unidades.Currency, retornar=False, readOnly=True)
        gridLayout_5.addWidget(self.C_adq,0,2,1,1)
        gridLayout_5.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate("equipment", "Coste Instalación:", None)),1,1,1,1)
        self.C_inst=Entrada_con_unidades(unidades.Currency, retornar=False, readOnly=True)
        gridLayout_5.addWidget(self.C_inst,1,2,1,1)

        self.tabWidget.setCurrentIndex(0)
        self.mostrarSubclasificacion(0)


    def mostrarSubclasificacion(self, ind):
        if ind<2:
            self.materialvacio.setVisible(False)
            self.materialotros.setVisible(True)
            self.Volumen.setReadOnly(True)
        else:
            self.materialvacio.setVisible(True)
            self.materialotros.setVisible(False)
            self.Volumen.setReadOnly(False)

    def cambiar_entrada(self, corriente):
        selfentrada=corriente
        self.calculo()

    def calculo(self):
        if self.todos_datos():

            self.rellenoSalida()

    def rellenoSalida(self):
        pass

    def todos_datos(self):
        pass

    def calcularCostos(self):
        if self.todos_datos():
            if self.tipo.currentIndex()==0:
                self.FireHeater.Coste(self.factorInstalacion.value(), 0, self.tipobox.currentIndex(), self.material.currentIndex())
            else:
                self.FireHeater.Coste(self.factorInstalacion.value(), 1, self.tipocilindrico.currentIndex(), self.material.currentIndex())
            self.C_adq.setValue(self.FireHeater.C_adq.config())
            self.C_inst.setValue(self.FireHeater.C_inst.config())

    def on_costIndex_clicked(self):
        dialog = costIndex.Ui_CostIndex()
        if dialog.exec_():
            self.indiceActual.setText(dialog.equipos.text())
            self.calcularCostos()
예제 #42
0
파일: widget.py 프로젝트: edusegzy/pychemqt
class Dialog_Finned(QtGui.QDialog):
    """Dialog to define finned tube properties"""
    def __init__(self, kwarg=None, parent=None):
        super(Dialog_Finned, self).__init__(parent=parent)
        self.setWindowTitle(QtGui.QApplication.translate(
            "pychemqt", "Specify tube finned characteristics"))
        layout = QtGui.QGridLayout(self)
        self.listTube = QtGui.QComboBox()
        self.listTube.addItem("")
        layout.addWidget(self.listTube, 0, 1, 1, 2)

        layout.addItem(QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                                         QtGui.QSizePolicy.Fixed), 1, 1, 1, 2)
        layout.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Material")), 2, 1)
        self.listMaterial = QtGui.QComboBox()
        self.listMaterial.addItem("")
        self.listMaterial.addItem(QtGui.QApplication.translate(
            "pychemqt", "Carbon Steel"))
        layout.addWidget(self.listMaterial, 2, 2)
        layout.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Thermal Conductivity")), 3, 1)
        self.kFin = Entrada_con_unidades(ThermalConductivity)
        layout.addWidget(self.kFin, 3, 2)
        layout.addItem(QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                                         QtGui.QSizePolicy.Fixed), 4, 1, 1, 2)

        layout.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Root diameter")), 5, 1)
        self.RootD = Entrada_con_unidades(Length, "PipeDiameter")
        layout.addWidget(self.RootD, 5, 2)
        layout.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Fin Height")), 6, 1)
        self.hFin = Entrada_con_unidades(Length, "Thickness")
        layout.addWidget(self.hFin, 6, 2)
        layout.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Base Fin Thickness")), 7, 1)
        self.BaseThickness = Entrada_con_unidades(Length, "Thickness")
        layout.addWidget(self.BaseThickness, 7, 2)
        layout.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Top Fin Thickness")), 8, 1)
        self.TopThickness = Entrada_con_unidades(Length, "Thickness")
        layout.addWidget(self.TopThickness, 8, 2)
        layout.addWidget(QtGui.QLabel(QtGui.QApplication.translate(
            "pychemqt", "Number of fins")), 9, 1)
        self.Nfin = Entrada_con_unidades(float, textounidad="fins/m")
        layout.addWidget(self.Nfin, 9, 2)

        self.buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Cancel |
                                                QtGui.QDialogButtonBox.Ok)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)
        layout.addWidget(self.buttonBox, 10, 1, 1, 2)

        for tuberia in finnedTube_database:
            self.listTube.addItem("%s %s" % (tuberia[0], tuberia[1]))
        self.listTube.currentIndexChanged.connect(self.rellenarData)
        self.listTube.currentIndexChanged.connect(self.setDisabled)

        if kwarg:
            self.hFin.setValue(kwarg["hFin"])
            self.BaseThickness.setValue(kwarg["thicknessBaseFin"])
            self.TopThickness.setValue(kwarg["thicknessTopFin"])
            self.kFin.setValue(kwarg["kFin"])
            self.Nfin.setValue(kwarg["nFin"])
            self.RootD.setValue(kwarg["rootDoFin"])

    def rellenarData(self, ind):
        tuberia = finnedTube_database[ind-1]
        if tuberia[0] == "HPT":
            self.Nfin.setValue(int(tuberia[1][:2]))
            self.BaseThickness.setValue(tuberia[12]/1000.)
            self.TopThickness.setValue(tuberia[12]/1000.)
            self.RootD.setValue(tuberia[6]/1000.)
            self.hFin.setValue(tuberia[13]/1000.)

    def setDisabled(self, bool):
        self.RootD.setReadOnly(bool)
        self.BaseThickness.setReadOnly(bool)
        self.TopThickness.setReadOnly(bool)
        self.Nfin.setReadOnly(bool)
        self.hFin.setReadOnly(bool)

    def kwarg(self):
        kwarg = {"hFin": self.hFin.value,
                 "thicknessBaseFin": self.BaseThickness.value,
                 "thicknessTopFin": self.TopThickness.value,
                 "kFin": self.kFin.value,
                 "nFin": self.Nfin.value,
                 "rootDoFin": self.RootD.value}
        return kwarg
예제 #43
0
class UI_equipment(UI_equip):
    """Baghouse equipment edition dialog"""
    Equipment = Baghouse()

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

        # Efficiency tab
        title = [
            QtWidgets.QApplication.translate("pychemqt", "Diameter") + ", " +
            Length.text("ParticleDiameter"),
            QtWidgets.QApplication.translate("pychemqt", "Efficiency")
        ]
        self.efic = Tabla(2, horizontalHeader=title, filas=1, stretch=False)
        self.efic.setColumnReadOnly(0, True)
        self.efic.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.efic.editingFinished.connect(self.cambiarRendimientos)
        self.tabWidget.insertTab(
            1, self.efic,
            QtWidgets.QApplication.translate("pychemqt", "Efficiencies"))

        # Calculate tab
        lyt_Calc = QtWidgets.QGridLayout(self.tabCalculo)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Mode")), 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, 3)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 2, 1, 1, 6)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "No cells")), 3,
            1)
        self.num_filtros = Entrada_con_unidades(int,
                                                spinbox=True,
                                                step=1,
                                                min=1,
                                                width=50,
                                                resaltado=True,
                                                start=1)
        self.num_filtros.valueChanged.connect(
            partial(self.changeParams, "num_filtros"))
        lyt_Calc.addWidget(self.num_filtros, 3, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Time")), 4, 1)
        self.tiempo = Entrada_con_unidades(Time, resaltado=True)
        self.tiempo.valueChanged.connect(partial(self.changeParams, "tiempo"))
        lyt_Calc.addWidget(self.tiempo, 4, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Pressure drop")),
            5, 1)
        self.deltaP = Entrada_con_unidades(Pressure, retornar=False)
        self.deltaP.setReadOnly(True)
        self.deltaP.valueChanged.connect(partial(self.changeParams, "deltaP"))
        lyt_Calc.addWidget(self.deltaP, 5, 2)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 6, 1, 1, 6)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Bags per cell")),
            7, 1)
        self.membranasFiltro = Entrada_con_unidades(int,
                                                    spinbox=True,
                                                    step=1,
                                                    min=1)
        self.membranasFiltro.valueChanged.connect(
            partial(self.changeParams, "membranasFiltro"))
        lyt_Calc.addWidget(self.membranasFiltro, 7, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Bag diameter")),
            8, 1)
        self.diametroMembrana = Entrada_con_unidades(Length)
        self.diametroMembrana.valueChanged.connect(
            partial(self.changeParams, "diametroMembrana"))
        lyt_Calc.addWidget(self.diametroMembrana, 8, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Area per bag")),
            9, 1)
        self.areaMembrana = Entrada_con_unidades(Area)
        self.areaMembrana.valueChanged.connect(
            partial(self.changeParams, "areaMembrana"))
        lyt_Calc.addWidget(self.areaMembrana, 9, 2)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Cloth resistence")), 7, 4)
        self.resistenciaFiltro = Entrada_con_unidades(float)
        self.resistenciaFiltro.valueChanged.connect(
            partial(self.changeParams, "resistenciaFiltro"))
        lyt_Calc.addWidget(self.resistenciaFiltro, 7, 5)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt",
                                                 "Cake resistence")), 8, 4)
        self.resistenciaTorta = Entrada_con_unidades(float)
        self.resistenciaTorta.valueChanged.connect(
            partial(self.changeParams, "resistenciaTorta"))
        lyt_Calc.addWidget(self.resistenciaTorta, 8, 5)
        lyt_Calc.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Cells cleaned")),
            9, 4)
        self.limpieza = Entrada_con_unidades(int, spinbox=True, step=1, min=0)
        self.limpieza.valueChanged.connect(
            partial(self.changeParams, "limpieza"))
        lyt_Calc.addWidget(self.limpieza, 9, 5)
        lyt_Calc.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 10, 1, 1,
            6)

        groupbox = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("pychemqt", "Results"))
        lyt_Calc.addWidget(groupbox, 11, 1, 1, 5)
        lyt = QtWidgets.QGridLayout(groupbox)

        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "No cells")), 1,
            1)
        self.num_filtrosCalc = Entrada_con_unidades(int, readOnly=True)
        lyt.addWidget(self.num_filtrosCalc, 1, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Time")), 2, 1)
        self.tiempoCalc = Entrada_con_unidades(Time, readOnly=True)
        lyt.addWidget(self.tiempoCalc, 2, 2)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Pressure drop")),
            3, 1)
        self.deltaPCalc = Entrada_con_unidades(Pressure, readOnly=True)
        lyt.addWidget(self.deltaPCalc, 3, 2)

        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Gas velocity")),
            1, 4)
        self.Vgas = Entrada_con_unidades(Speed, retornar=False, readOnly=True)
        lyt.addWidget(self.Vgas, 1, 5)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Efficiency")), 2,
            4)
        self.rendimiento = Entrada_con_unidades(float, readOnly=True)
        lyt.addWidget(self.rendimiento, 2, 5)
        lyt.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("pychemqt", "Area")), 3, 4)
        self.floorArea = Entrada_con_unidades(Area, readOnly=True)
        lyt.addWidget(self.floorArea, 3, 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"))

        if equipment:
            self.setEquipment(equipment)

    def cambiarRendimientos(self):
        self.changeParams("rendimientos", self.efic.getColumn(1))

    def tipoCalculoCambiado(self, tipo_calculo):
        if tipo_calculo == 0:
            self.num_filtros.setReadOnly(False)
            self.num_filtros.setResaltado(True)
            self.tiempo.setReadOnly(False)
            self.tiempo.setResaltado(True)
            self.deltaP.setReadOnly(True)
            self.deltaP.setResaltado(False)
        elif tipo_calculo == 1:
            self.num_filtros.setReadOnly(False)
            self.num_filtros.setResaltado(True)
            self.tiempo.setReadOnly(True)
            self.tiempo.setResaltado(False)
            self.deltaP.setReadOnly(False)
            self.deltaP.setResaltado(True)
        else:
            self.num_filtros.setReadOnly(True)
            self.num_filtros.setResaltado(False)
            self.tiempo.setReadOnly(False)
            self.tiempo.setResaltado(True)
            self.deltaP.setReadOnly(False)
            self.deltaP.setResaltado(True)
        self.changeParams("metodo", tipo_calculo)

    def rellenarInput(self):
        UI_equip.rellenarInput(self)
        if self.Equipment.kwargs["entrada"].solido:
            diametros = []
            for d in self.Equipment.kwargs["entrada"].solido.diametros:
                diametros.append(d.config("ParticleDiameter"))
            self.efic.setColumn(0, diametros)
        if any(self.Equipment.kwargs["rendimientos"]):
            self.efic.setColumn(1, self.Equipment.kwargs["rendimientos"])