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)
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)
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_()
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_()
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)
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)
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)
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)
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)
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)
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)
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
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)
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())
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
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)
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
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())
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)
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)
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)
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)
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"])
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})
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)
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})
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)
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)
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()
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()
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)
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()
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
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"])