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): """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): """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): """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): """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(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): """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): """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 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): """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_Contribution(newComponent): """Dialog to define hypotethical new component with several group contribucion methods""" ViewDetails = View_Contribution def __init__(self, metodo, parent=None): """Metodo: name of group contribution method: Joback, Constantinou, Wilson, Marrero, Elliott, Ambrose, Klincewicz """ super(Ui_Contribution, self).__init__(parent) # Initialization variables self.grupo = [] self.indices = [] self.contribucion = [] func = {} for f in _methods: func[f.__name__] = f self.unknown = func[metodo]() title = self.unknown.__title__ title += " " + QtWidgets.QApplication.translate( "pychemqt", "new component definition") self.setWindowTitle(title) lyt = QtWidgets.QVBoxLayout(self) widget = QtWidgets.QWidget() layout = QtWidgets.QGridLayout(widget) layout.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Name")), 1, 0) self.nombre = QtWidgets.QLineEdit() self.nombre.textChanged.connect(partial(self.changeParams, "name")) layout.addWidget(self.nombre, 1, 1, 1, 3) self.Group = QtWidgets.QTableWidget() self.Group.verticalHeader().hide() self.Group.setRowCount(0) self.Group.setColumnCount(2) self.Group.setHorizontalHeaderItem(0, QtWidgets.QTableWidgetItem("Nk")) self.Group.setHorizontalHeaderItem( 1, QtWidgets.QTableWidgetItem( QtWidgets.QApplication.translate("pychemqt", "Group"))) self.Group.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.Group.setSortingEnabled(True) self.Group.horizontalHeader().setStretchLastSection(True) self.Group.setColumnWidth(0, 50) self.Group.setItemDelegateForColumn(0, SpinEditor(self)) self.Group.cellChanged.connect(self.cellChanged) self.Group.setEditTriggers(QtWidgets.QAbstractItemView.AllEditTriggers) layout.addWidget(self.Group, 2, 0, 3, 3) self.Formula = QtWidgets.QLabel() font = QtGui.QFont() font.setPointSize(12) self.Formula.setFont(font) self.Formula.setAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter) self.Formula.setFixedHeight(50) layout.addWidget(self.Formula, 2, 3) self.btnDelete = QtWidgets.QPushButton( QtGui.QIcon( QtGui.QPixmap( os.path.join(IMAGE_PATH, "button", "editDelete.png"))), QtWidgets.QApplication.translate("pychemqt", "Delete")) self.btnDelete.clicked.connect(self.borrar) layout.addWidget(self.btnDelete, 3, 3) self.btnClear = QtWidgets.QPushButton( QtGui.QIcon( QtGui.QPixmap(os.path.join(IMAGE_PATH, "button", "clear.png"))), QtWidgets.QApplication.translate("pychemqt", "Clear")) self.btnClear.clicked.connect(self.clear) layout.addWidget(self.btnClear, 4, 3) self.line = QtWidgets.QFrame() self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setFrameShadow(QtWidgets.QFrame.Sunken) layout.addWidget(self.line, 5, 0, 1, 4) self.groupContributions = QtWidgets.QListWidget() self.groupContributions.currentItemChanged.connect(self.selectChanged) self.groupContributions.itemDoubleClicked.connect(self.add) layout.addWidget(self.groupContributions, 6, 0, 6, 3) self.btnAdd = QtWidgets.QPushButton( QtGui.QIcon( QtGui.QPixmap(os.path.join(IMAGE_PATH, "button", "add.png"))), QtWidgets.QApplication.translate("pychemqt", "Add")) self.btnAdd.setDisabled(True) self.btnAdd.clicked.connect(self.add) layout.addWidget(self.btnAdd, 6, 3) layout.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 7, 1) # Show selection for method with several order contributions if self.unknown.SecondOrder: self.Order1 = QtWidgets.QRadioButton( QtWidgets.QApplication.translate("pychemqt", "1st order")) self.Order1.setChecked(True) self.Order1.toggled.connect(self.Order) layout.addWidget(self.Order1, 9, 3) self.Order2 = QtWidgets.QRadioButton( QtWidgets.QApplication.translate("pychemqt", "2nd order")) self.Order2.toggled.connect(self.Order) layout.addWidget(self.Order2, 10, 3) if self.unknown.ThirdOrder: self.Order3 = QtWidgets.QRadioButton( QtWidgets.QApplication.translate("pychemqt", "3rd order")) layout.addWidget(self.Order3, 11, 3) self.Order3.toggled.connect(self.Order) layout.addItem( QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed), 12, 1) labelTb = QtWidgets.QLabel("Tb") labelTb.setToolTip( QtWidgets.QApplication.translate( "pychemqt", "Experimental Boiling Temperature")) layout.addWidget(labelTb, 13, 0) self.Tb = Entrada_con_unidades(Temperature) self.Tb.valueChanged.connect(partial(self.changeParams, "Tb")) layout.addWidget(self.Tb, 13, 1) labelM = QtWidgets.QLabel("M") labelM.setToolTip( QtWidgets.QApplication.translate("pychemqt", "Molecular Weight")) layout.addWidget(labelM, 14, 0) self.M = Entrada_con_unidades(float, textounidad="g/mol") self.M.valueChanged.connect(partial(self.changeParams, "M")) layout.addWidget(self.M, 14, 1) label = QtWidgets.QLabel("SG") label.setToolTip( QtWidgets.QApplication.translate( "pychemqt", "Experimental Specific Gravity at 60ºF")) layout.addWidget(label, 15, 0) self.SG = Entrada_con_unidades(float) self.SG.valueChanged.connect(partial(self.changeParams, "SG")) layout.addWidget(self.SG, 15, 1) lyt.addWidget(widget) # Show widget for specific method if metodo == "Constantinou": # Disable Tb as input parameter labelTb.setEnabled(False) self.Tb.setEnabled(False) elif metodo == "Wilson": self.Tb.setResaltado(True) layout.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Rings")), 16, 0) self.ring = QtWidgets.QSpinBox() self.ring.setFixedWidth(80) self.ring.valueChanged.connect(partial(self.changeParams, "ring")) layout.addWidget(self.ring, 16, 1) elif metodo == "Elliott": self.M.setResaltado(True) elif metodo == "Ambrose": self.Tb.setResaltado(True) layout.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Platt number")), 16, 0) self.plat = QtWidgets.QSpinBox() self.plat.setFixedWidth(80) tr = "The Platt number is the number of pairs of carbon atoms " tr += "which are separated by three carbon-carbon bonds and is an " tr += "indicator of the degree of branching in the molecule. The " tr += "Platt number of an n-alkane is equal to the number of " tr += "carbons minus three" self.plat.setToolTip( QtWidgets.QApplication.translate("pychemqt", tr)) self.plat.valueChanged.connect(partial(self.changeParams, "platt")) layout.addWidget(self.plat, 16, 1) elif metodo == "Klincewicz": self.Tb.setResaltado(True) self.nogroupKlincewicz = QtWidgets.QCheckBox( QtWidgets.QApplication.translate( "pychemqt", "Use the simple no group contribution method")) self.nogroupKlincewicz.toggled.connect(self.nogroupCheckToggled) layout.addWidget(self.nogroupKlincewicz, 16, 0, 1, 4) layout.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Atoms")), 17, 0) self.atoms = QtWidgets.QSpinBox() self.atoms.setFixedWidth(80) self.atoms.valueChanged.connect(partial(self.changeParams, "atoms")) layout.addWidget(self.atoms, 17, 1) newComponent.loadUI(self) for i, nombre in enumerate(self.unknown.coeff["txt"]): self.groupContributions.addItem(nombre[0]) if self.unknown.SecondOrder: self.Order() if metodo == "Klincewicz": self.nogroupCheckToggled(False) def Order(self): """Show/Hide group of undesired order""" for i in range(self.unknown.FirstOrder): item = self.groupContributions.item(i) item.setHidden(not self.Order1.isChecked()) for i in range(self.unknown.FirstOrder, self.unknown.SecondOrder): item = self.groupContributions.item(i) item.setHidden(not self.Order2.isChecked()) if self.unknown.ThirdOrder: for i in range(self.unknown.SecondOrder, self.unknown.ThirdOrder): item = self.groupContributions.item(i) item.setHidden(not self.Order3.isChecked()) def nogroupCheckToggled(self, boolean): """Set advanced properties input status for Klincewitcz method""" self.changeParams("nogroup", boolean) self.M.setResaltado(boolean) self.atoms.setEnabled(boolean) self.Group.setDisabled(boolean) self.Formula.setDisabled(boolean) self.btnDelete.setDisabled(boolean) self.btnClear.setDisabled(boolean) self.btnAdd.setDisabled(boolean) self.groupContributions.setDisabled(boolean) def borrar(self, indice=None): """Remove some group contribution from added group list""" if not indice: indice = self.Group.currentRow() if indice != -1: self.Group.removeRow(indice) del self.grupo[indice] del self.indices[indice] del self.contribucion[indice] self.calculo(**{ "group": self.indices, "contribution": self.contribucion }) def clear(self): """Clear widgets from dialog""" self.Group.clearContents() self.Group.setRowCount(0) self.grupo = [] self.indices = [] self.contribucion = [] self.Formula.clear() self.M.clear() self.nombre.clear() self.Tb.clear() self.SG.clear() self.unknown.clear() self.status.setState(self.unknown.status, self.unknown.msg) def cellChanged(self, i, j): """Process the user manual count of group contribution changed""" if j == 0: valor = int(self.Group.item(i, j).text()) if valor <= 0: self.borrar(i) else: self.contribucion[i] = int(valor) kw = {"group": self.indices, "contribution": self.contribucion} self.calculo(**kw) def selectChanged(self, i): """The add button is only enabled when the group list have any selected row""" self.btnAdd.setEnabled(i != -1) def add(self): """Add the current selected item to the list of group""" indice = self.Group.rowCount() grupo = self.groupContributions.currentItem().text() if grupo not in self.grupo: self.grupo.append(grupo) self.indices.append(self.groupContributions.currentRow()) self.contribucion.append(1) self.Group.setRowCount(indice + 1) self.Group.setItem(indice, 0, QtWidgets.QTableWidgetItem("1")) self.Group.item(indice, 0).setTextAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.Group.setItem(indice, 1, QtWidgets.QTableWidgetItem(grupo)) self.Group.item(indice, 1).setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) self.Group.setRowHeight(indice, 20) else: indice = self.grupo.index(grupo) self.contribucion[indice] += 1 self.Group.item(indice, 0).setText( str(int(self.Group.item(indice, 0).text()) + 1)) kw = {"group": self.indices, "contribution": self.contribucion} self.calculo(**kw) def calculo(self, **kwargs): """Calculate function""" newComponent.calculo(self, **kwargs) if self.unknown.status in (1, 3): self.Formula.setText(self.unknown.formula)
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): """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): """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"])