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 ElementDialog(QtWidgets.QDialog): """Dialog to show all element properties""" def __init__(self, elemento, parent=None): super(ElementDialog, self).__init__(parent) self.setWindowTitle( QtWidgets.QApplication.translate("pychemqt", "Properties of " + elemento.name)) lyt = QtWidgets.QVBoxLayout(self) tabWidget = QtWidgets.QTabWidget() lyt.addWidget(tabWidget) btbox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Close) btbox.rejected.connect(self.reject) lyt.addWidget(btbox) tabGeneral = QtWidgets.QWidget() layoutGeneral = QtWidgets.QGridLayout(tabGeneral) layoutGeneral.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Name:")), 1, 1) layoutGeneral.addWidget(QtWidgets.QLabel(elemento.name), 1, 2) layoutGeneral.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Serie:")), 2, 1) layoutGeneral.addWidget(QtWidgets.QLabel(elemento.serie), 2, 2) layoutGeneral.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Group")), 3, 1) layoutGeneral.addWidget(QtWidgets.QLabel(str(elemento.group)), 3, 2) layoutGeneral.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Period")), 4, 1) layoutGeneral.addWidget(QtWidgets.QLabel(str(elemento.period)), 4, 2) layoutGeneral.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Block")), 5, 1) layoutGeneral.addWidget(QtWidgets.QLabel(elemento.block), 5, 2) layoutGeneral.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed), 6, 1) label = QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "History")) font = QtGui.QFont() font.setWeight(75) font.setBold(True) label.setFont(font) layoutGeneral.addWidget(label, 7, 1, 1, 3) label_8 = QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Discovery") + ": " + elemento.country + "(" + elemento.country + ")" + os.linesep + QtWidgets.QApplication.translate("pychemqt", "Discovered by ") + elemento.discover + os.linesep + QtWidgets.QApplication.translate("pychemqt", "Etymology") + ": " + elemento.etymology) label_8.setMargin(5) label_8.setWordWrap(True) layoutGeneral.addWidget(label_8, 8, 1, 1, 3) self.botoncito = QtWidgets.QLabel() self.botoncito.setStyleSheet("background-color: %s;" % elemento.color) self.botoncito.setFrameShape(QtWidgets.QFrame.StyledPanel) self.botoncito.setFixedSize(60, 60) layoutGeneral.addWidget(self.botoncito, 1, 5, 3, 1) label = QtWidgets.QLabel() label.setText(str(elemento.id)) label.setAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignBottom) layoutGeneral.addWidget(label, 1, 5) label = QtWidgets.QLabel(elemento.symbol) font.setPointSize(12) label.setFont(font) label.setAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignBottom) layoutGeneral.addWidget(label, 2, 5) layoutGeneral.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 9, 3) tabWidget.addTab( tabGeneral, QtWidgets.QApplication.translate("pychemqt", "General")) tabFisica = QtWidgets.QWidget() lytphy = QtWidgets.QGridLayout(tabFisica) lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Fase:")), 1, 1) lytphy.addWidget(QtWidgets.QLabel(elemento.phase + " a 0ºC"), 1, 2, 1, 1) if elemento.density_Solid: lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Solid Density:")), 2, 1) lytphy.addWidget( self.drawData(unidades.Density, elemento.density_Solid, "gcc", txt=" @ 20ºC"), 2, 2) if elemento.density_Liq: lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Liquid Density:")), 3, 1) lytphy.addWidget( self.drawData(unidades.Density, elemento.density_Liq, "gcc", txt=" " + QtWidgets.QApplication.translate( "pychemqt", "at melting point")), 3, 2) if elemento.density_Gas: lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Gas Density:")), 4, 1) lytphy.addWidget( self.drawData(unidades.Density, elemento.density_Gas, "gl", txt=" @ 0ºC"), 4, 2) lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Appearance:")), 5, 1) label = QtWidgets.QLabel(elemento.appearance) label.setWordWrap(True) lytphy.addWidget(label, 5, 2) lytphy.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed), 6, 1, 1, 3) label = QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Thermal properties")) label.setFont(font) lytphy.addWidget(label, 7, 1) lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Melting point:")), 8, 1) self.punto_fusion = self.drawData(unidades.Temperature, elemento.Tf) lytphy.addWidget(self.punto_fusion, 8, 2) lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Boiling point:")), 9, 1) self.punto_ebullicion = self.drawData(unidades.Temperature, elemento.Tb) lytphy.addWidget(self.punto_ebullicion, 9, 2) lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Heat of fusion:")), 10, 1) self.calor_fusion = self.drawData(unidades.MolarEnthalpy, elemento.Heat_f, "kJkmol") lytphy.addWidget(self.calor_fusion, 10, 2) lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Heat of vaporization:")), 11, 1) self.calor_vaporizacion = self.drawData(unidades.MolarEnthalpy, elemento.Heat_b, "kJkmol") lytphy.addWidget(self.calor_vaporizacion, 11, 2) lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Specific heat capacity:")), 12, 1) self.capacidad_calorifica = self.drawData(unidades.SpecificHeat, elemento.Cp, "JgK") lytphy.addWidget(self.capacidad_calorifica, 12, 2) lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Thermal conductivity:")), 13, 1) self.conductividad_termica = self.drawData( unidades.ThermalConductivity, elemento.k, txt=" @ 300K") lytphy.addWidget(self.conductividad_termica, 13, 2) lytphy.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Debye Temperature:")), 14, 1) self.temperatura_debye = self.drawData(unidades.Temperature, elemento.T_debye) lytphy.addWidget(self.temperatura_debye, 14, 2) lytphy.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 15, 1, 1, 3) tabWidget.addTab( tabFisica, QtWidgets.QApplication.translate("pychemqt", "Physical properties")) tabAtom = QtWidgets.QWidget() lyt_A = QtWidgets.QGridLayout(tabAtom) lyt_A.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Atomic mass:")), 1, 1) if elemento.atomic_mass: self.masa_atomica = QtWidgets.QLabel( str(elemento.atomic_mass) + " g/mol") else: self.masa_atomica = QtWidgets.QLabel(elemento.atomic_mass) lyt_A.addWidget(self.masa_atomica, 1, 2) lyt_A.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Atomic Volume:")), 2, 1) self.volumen_atomico = self.drawData(unidades.MolarVolume, elemento.atomic_volume) lyt_A.addWidget(self.volumen_atomico, 2, 2) lyt_A.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Atomic radius:")), 3, 1) if elemento.atomic_radius: self.radio_atomico = QtWidgets.QLabel( str(elemento.atomic_radius) + " pm") else: self.radio_atomico = QtWidgets.QLabel(str(elemento.atomic_radius)) lyt_A.addWidget(self.radio_atomico, 3, 2) lyt_A.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Covalent radius:")), 4, 1) if elemento.covalent_radius: self.radio_covalente = QtWidgets.QLabel( str(elemento.covalent_radius) + " pm") else: self.radio_covalente = QtWidgets.QLabel( str(elemento.covalent_radius)) lyt_A.addWidget(self.radio_covalente, 4, 2) lyt_A.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Van der Waals radius:")), 5, 1) if elemento.vanderWaals_radius: self.radio_waals = QtWidgets.QLabel( str(elemento.vanderWaals_radius) + " pm") else: self.radio_waals = QtWidgets.QLabel( str(elemento.vanderWaals_radius)) lyt_A.addWidget(self.radio_waals, 5, 2) lyt_A.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Ionic radii:")), 6, 1) if elemento.ionic_radii: self.radio_ionico = QtWidgets.QLabel( str(elemento.ionic_radii) + " pm") else: self.radio_ionico = QtWidgets.QLabel(str(elemento.ionic_radii)) lyt_A.addWidget(self.radio_ionico, 6, 2) lyt_A.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed), 7, 1, 1, 3) label = QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Electronic properties")) label.setFont(font) lyt_A.addWidget(label, 8, 1) lyt_A.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Electronic configuration:")), 9, 1) lyt_A.addWidget(QtWidgets.QLabel(elemento.electron_configuration), 9, 2) lyt_A.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Oxidation states:")), 10, 1) lyt_A.addWidget(QtWidgets.QLabel(elemento.oxidation), 10, 2) lyt_A.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Electronegativity:")), 11, 1) lyt_A.addWidget(QtWidgets.QLabel(str(elemento.electronegativity)), 11, 2) lyt_A.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Electron affinity:")), 12, 1) self.afinidad_electronica = self.drawData(unidades.MolarEnthalpy, elemento.electron_affinity, "kJkmol") lyt_A.addWidget(self.afinidad_electronica, 12, 2) lyt_A.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "1st ionization energy:")), 13, 1) self.energia_ionizacion = self.drawData(unidades.MolarEnthalpy, elemento.first_ionization, "kJkmol") lyt_A.addWidget(self.energia_ionizacion, 13, 2) lyt_A.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 14, 1, 1, 3) tabWidget.addTab( tabAtom, QtWidgets.QApplication.translate("pychemqt", "Atomic properties")) tabCristal = QtWidgets.QWidget() lyt_C = QtWidgets.QGridLayout(tabCristal) lyt_C.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Lattice type:")), 1, 1) lyt_C.addWidget(QtWidgets.QLabel(elemento.lattice_type), 1, 2) lyt_C.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Space group:")), 2, 1) lyt_C.addWidget(QtWidgets.QLabel(elemento.space_group), 2, 2) lyt_C.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Lattice edge lengths:")), 3, 1) self.lados = QtWidgets.QLabel() if elemento.lattice_edges: self.lados.setText( "%spm, %spm, %spm" % (elemento.lattice_edges[0], elemento.lattice_edges[1], elemento.lattice_edges[2])) else: self.lados.setText(elemento.lattice_edges) lyt_C.addWidget(self.lados, 3, 2) lyt_C.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Lattice angles:")), 4, 1) self.angulos = QtWidgets.QLabel() if elemento.lattice_angles: self.angulos.setText( "%sº, %sº, %sº" % (elemento.lattice_angles[0], elemento.lattice_angles[1], elemento.lattice_angles[2])) else: self.angulos.setText(elemento.lattice_angles) lyt_C.addWidget(self.angulos, 4, 2) lyt_C.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Lattice unit volume:")), 5, 1) self.volumen_celda = QtWidgets.QLabel() if elemento.lattice_angles: self.volumen_celda.setText("%0.5f mm<sup>3</sup>" % elemento.lattice_volume) else: self.volumen_celda.setText(elemento.lattice_volume) lyt_C.addWidget(self.volumen_celda, 5, 2) lyt_C.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 6, 1, 1, 3) label = QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Isotopes")) label.setFont(font) lyt_C.addWidget(label, 8, 1) title = [ QtWidgets.QApplication.translate("pychemqt", "Mass Number"), QtWidgets.QApplication.translate("pychemqt", "Mass"), QtWidgets.QApplication.translate("pychemqt", "Abundance") ] self.isotopes = Tabla(3, horizontalHeader=title, readOnly=True, stretch=True, verticalHeader=False) self.isotopes.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectRows) self.isotopes.setColumn(0, [iso[0] for iso in elemento.isotopes], decimales=0) self.isotopes.setColumn(1, [iso[1] for iso in elemento.isotopes], format=1, decimales=10) self.isotopes.setColumn(2, [iso[2] for iso in elemento.isotopes], format=1, decimales=10) lyt_C.addWidget(self.isotopes, 9, 1, 1, 2) lyt_C.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 10, 1, 1, 3) tabWidget.addTab( tabCristal, QtWidgets.QApplication.translate("pychemqt", "Crystallographic")) def drawData(self, unit, data, unidad="", txt=""): """Return a widget with the data inprint unit: unidad subclass data: value to set unidad: unit of value to show txt: opcional txt to show for unit""" if data and unidad: value = unit(data, unidad) widget = Entrada_con_unidades(unit, readOnly=True, value=value, textounidad=txt) elif data: widget = Entrada_con_unidades(unit, readOnly=True, value=data, textounidad=txt) else: widget = QtWidgets.QLabel(str(data)) return widget
class widgetReacciones(QtWidgets.QWidget): """Widget con la tabla de reacciones y los botones para modificar la lista de reacciones""" changed = QtCore.pyqtSignal() reacciones=[] reaccion=None activo=None ajuste=None def __init__(self, parent=None): super(widgetReacciones, self).__init__(parent) self.indices, self.nombres, M=getComponents() gridLayout = QtWidgets.QGridLayout(self) self.TablaReacciones=Tabla(5, horizontalHeader=[QtWidgets.QApplication.translate("pychemqt", "Reaction"), "ΔHr, %s" %unidades.MolarEnthalpy(None).text(), QtWidgets.QApplication.translate("pychemqt", "Type"), QtWidgets.QApplication.translate("pychemqt", "Phase"), QtWidgets.QApplication.translate("pychemqt", "Description")], dinamica=False, verticalHeader=True, orientacion=QtCore.Qt.AlignLeft) self.TablaReacciones.setMinimumWidth(500) self.TablaReacciones.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.TablaReacciones.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection) self.TablaReacciones.horizontalHeader().setStretchLastSection(True) self.TablaReacciones.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) self.TablaReacciones.itemSelectionChanged.connect(self.actualizarBotones) gridLayout.addWidget(self.TablaReacciones,1,1,6,4) self.botonAbrir=QtWidgets.QPushButton(QtGui.QIcon(QtGui.QPixmap(os.environ["pychemqt"]+"/images/button/fileOpen.png")), QtWidgets.QApplication.translate("pychemqt", "Open")) self.botonAbrir.clicked.connect(self.botonAbrirClicked) gridLayout.addWidget(self.botonAbrir,1,5) self.botonGuardar=QtWidgets.QPushButton(QtGui.QIcon(QtGui.QPixmap(os.environ["pychemqt"]+"/images/button/fileSave.png")), QtWidgets.QApplication.translate("pychemqt", "Save")) self.botonGuardar.clicked.connect(self.botonGuardarClicked) self.botonGuardar.setSizePolicy(QtWidgets.QSizePolicy.Fixed,QtWidgets.QSizePolicy.Fixed) self.botonGuardar.setEnabled(False) gridLayout.addWidget(self.botonGuardar,2,5) self.botonNew=QtWidgets.QPushButton(QtGui.QIcon(QtGui.QPixmap(os.environ["pychemqt"]+"/images/button/fileNew.png")), QtWidgets.QApplication.translate("pychemqt", "New")) self.botonNew.clicked.connect(self.botonNewClicked) gridLayout.addWidget(self.botonNew,3,5) self.botonEdit=QtWidgets.QPushButton(QtGui.QIcon(QtGui.QPixmap(os.environ["pychemqt"]+"/images/button/editor.png")), QtWidgets.QApplication.translate("pychemqt", "Edit")) self.botonEdit.setEnabled(False) self.botonEdit.setCheckable(True) self.botonEdit.clicked.connect(self.botonEditClicked) gridLayout.addWidget(self.botonEdit,4,5) self.botonDelete=QtWidgets.QPushButton(QtGui.QIcon(QtGui.QPixmap(os.environ["pychemqt"]+"/images/button/editDelete.png")), QtWidgets.QApplication.translate("pychemqt", "Delete")) self.botonDelete.setEnabled(False) self.botonDelete.clicked.connect(self.botonDeleteClicked) gridLayout.addWidget(self.botonDelete,5,5) self.botonClear=QtWidgets.QPushButton(QtGui.QIcon(QtGui.QPixmap(os.environ["pychemqt"]+"/images/button/clear.png")), QtWidgets.QApplication.translate("pychemqt", "Clear")) self.botonClear.clicked.connect(self.botonClearClicked) gridLayout.addWidget(self.botonClear,6,5) gridLayout.addItem(QtWidgets.QSpacerItem(10,10,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding),10,1) def actualizarBotones(self, bool=True): self.botonEdit.setEnabled(bool) self.botonDelete.setEnabled(bool) def botonAbrirClicked(self): fname = str(QtWidgets.QFileDialog.getOpenFileName(self, QtWidgets.QApplication.translate("pychemqt", "Open reaction file"), "./", QtWidgets.QApplication.translate("pychemqt", "reaction file")+" (*.rec);;"+QtWidgets.QApplication.translate("pychemqt", "All files")+" (*.*)")[0]) if fname: with open(fname, "r") as archivo: reacciones=pickle.load(archivo) print(reacciones) self.reacciones=reacciones self.botonGuardar.setEnabled(True) for fila, reaccion in enumerate(reacciones): self.TablaReacciones.addRow() self.TablaReacciones.setValue(fila, 0, reaccion.text) self.TablaReacciones.setValue(fila, 1, "%0.4e" %reaccion.Hr.config(), QtCore.Qt.AlignRight) self.TablaReacciones.setValue(fila, 2, str(reaccion.tipo+1)+" - "+reaction.Reaction.TEXT_TYPE[reaccion.tipo]) self.TablaReacciones.setValue(fila, 3, reaction.Reaction.TEXT_PHASE[reaccion.fase]) self.TablaReacciones.item(fila, 4).setFlags(QtCore.Qt.ItemIsEditable|QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsSelectable) for i in range(4): self.TablaReacciones.resizeColumnToContents(i) self.changed.emit() def botonGuardarClicked(self): fname = str(QtWidgets.QFileDialog.getSaveFileName(self, QtWidgets.QApplication.translate("pychemqt", "Save reaction to file"), "./", QtWidgets.QApplication.translate("pychemqt", "reaction file")+" (*.rec)")[0]) if fname: if fname.split(".")[-1]!="rec": fname+=".rec" pickle.dump(self.reacciones, open(fname, "w")) def botonNewClicked(self): dialog=UI_reacciones(parent=self) if dialog.exec_(): pass def botonEditClicked(self, bool): if bool: indice=self.TablaReacciones.currentRow() reaccion=self.reacciones[indice] dialogo=UI_reacciones(reaccion, self) dialogo.exec_() # self.rellenar(self.reaccion) # self.activo=indice else: self.botonAddClicked(self.activo, False) self.reacciones[self.activo]=self.reaccion self.TablaReacciones.setCurrentCell(self.activo, 0) self.activo=-1 self.changed.emit() self.botonNew.setEnabled(not bool) self.botonDelete.setEnabled(not bool) self.botonClear.setEnabled(not bool) self.botonAdd.setEnabled(not bool) self.botonAbrir.setEnabled(not bool) self.botonGuardar.setEnabled(not bool) def botonDeleteClicked(self): indice=self.TablaReacciones.currentRow() self.TablaReacciones.removeRow(indice) del self.reacciones[indice] self.TablaReacciones.clearSelection() self.actualizarBotones(False) self.changed.emit() def botonClearClicked(self): if self.reacciones: self.reacciones=[] self.TablaReacciones.setRowCount(0) self.botonGuardar.setEnabled(False) def botonAddClicked(self, fila, add=True): if add: fila=self.TablaReacciones.rowCount() self.TablaReacciones.addRow() self.TablaReacciones.setValue(fila, 0, self.Formula.text()) self.TablaReacciones.setValue(fila, 1, "%0.4e" %self.Hr.value.config(), QtCore.Qt.AlignRight) self.TablaReacciones.setValue(fila, 2, str(self.tipo.currentIndex()+1)+" - "+self.tipo.currentText()) self.TablaReacciones.setValue(fila, 3, self.Fase.currentText()) self.TablaReacciones.item(fila, 4).setFlags(QtCore.Qt.ItemIsEditable|QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsSelectable) for i in range(4): self.TablaReacciones.resizeColumnToContents(i) self.reacciones.insert(fila, self.reaccion) self.botonGuardar.setEnabled(True) self.changed.emit()
class widgetReacciones(QtWidgets.QWidget): """Widget con la tabla de reacciones y los botones para modificar la lista de reacciones""" changed = QtCore.pyqtSignal() reacciones = [] reaccion = None activo = None ajuste = None def __init__(self, parent=None): super(widgetReacciones, self).__init__(parent) self.indices, self.nombres, M = getComponents() gridLayout = QtWidgets.QGridLayout(self) self.TablaReacciones = Tabla( 5, horizontalHeader=[ QtWidgets.QApplication.translate("pychemqt", "Reaction"), "ΔHr, %s" % unidades.MolarEnthalpy(None).text(), QtWidgets.QApplication.translate("pychemqt", "Type"), QtWidgets.QApplication.translate("pychemqt", "Phase"), QtWidgets.QApplication.translate("pychemqt", "Description") ], dinamica=False, verticalHeader=True, orientacion=QtCore.Qt.AlignLeft) self.TablaReacciones.setMinimumWidth(500) self.TablaReacciones.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectRows) self.TablaReacciones.setSelectionMode( QtWidgets.QAbstractItemView.SingleSelection) self.TablaReacciones.horizontalHeader().setStretchLastSection(True) self.TablaReacciones.setEditTriggers( QtWidgets.QAbstractItemView.NoEditTriggers) self.TablaReacciones.itemSelectionChanged.connect( self.actualizarBotones) gridLayout.addWidget(self.TablaReacciones, 1, 1, 6, 4) self.botonAbrir = QtWidgets.QPushButton( QtGui.QIcon( QtGui.QPixmap(os.environ["pychemqt"] + "/images/button/fileOpen.png")), QtWidgets.QApplication.translate("pychemqt", "Open")) self.botonAbrir.clicked.connect(self.botonAbrirClicked) gridLayout.addWidget(self.botonAbrir, 1, 5) self.botonGuardar = QtWidgets.QPushButton( QtGui.QIcon( QtGui.QPixmap(os.environ["pychemqt"] + "/images/button/fileSave.png")), QtWidgets.QApplication.translate("pychemqt", "Save")) self.botonGuardar.clicked.connect(self.botonGuardarClicked) self.botonGuardar.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) self.botonGuardar.setEnabled(False) gridLayout.addWidget(self.botonGuardar, 2, 5) self.botonNew = QtWidgets.QPushButton( QtGui.QIcon( QtGui.QPixmap(os.environ["pychemqt"] + "/images/button/fileNew.png")), QtWidgets.QApplication.translate("pychemqt", "New")) self.botonNew.clicked.connect(self.botonNewClicked) gridLayout.addWidget(self.botonNew, 3, 5) self.botonEdit = QtWidgets.QPushButton( QtGui.QIcon( QtGui.QPixmap(os.environ["pychemqt"] + "/images/button/editor.png")), QtWidgets.QApplication.translate("pychemqt", "Edit")) self.botonEdit.setEnabled(False) self.botonEdit.setCheckable(True) self.botonEdit.clicked.connect(self.botonEditClicked) gridLayout.addWidget(self.botonEdit, 4, 5) self.botonDelete = QtWidgets.QPushButton( QtGui.QIcon( QtGui.QPixmap(os.environ["pychemqt"] + "/images/button/editDelete.png")), QtWidgets.QApplication.translate("pychemqt", "Delete")) self.botonDelete.setEnabled(False) self.botonDelete.clicked.connect(self.botonDeleteClicked) gridLayout.addWidget(self.botonDelete, 5, 5) self.botonClear = QtWidgets.QPushButton( QtGui.QIcon( QtGui.QPixmap(os.environ["pychemqt"] + "/images/button/clear.png")), QtWidgets.QApplication.translate("pychemqt", "Clear")) self.botonClear.clicked.connect(self.botonClearClicked) gridLayout.addWidget(self.botonClear, 6, 5) gridLayout.addItem( QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 10, 1) def actualizarBotones(self, bool=True): self.botonEdit.setEnabled(bool) self.botonDelete.setEnabled(bool) def botonAbrirClicked(self): fname = str( QtWidgets.QFileDialog.getOpenFileName( self, QtWidgets.QApplication.translate("pychemqt", "Open reaction file"), "./", QtWidgets.QApplication.translate("pychemqt", "reaction file") + " (*.rec);;" + QtWidgets.QApplication.translate("pychemqt", "All files") + " (*.*)")[0]) if fname: with open(fname, "r") as archivo: reacciones = pickle.load(archivo) print(reacciones) self.reacciones = reacciones self.botonGuardar.setEnabled(True) for fila, reaccion in enumerate(reacciones): self.TablaReacciones.addRow() self.TablaReacciones.setValue(fila, 0, reaccion.text) self.TablaReacciones.setValue(fila, 1, "%0.4e" % reaccion.Hr.config(), QtCore.Qt.AlignRight) self.TablaReacciones.setValue( fila, 2, str(reaccion.tipo + 1) + " - " + reaction.Reaction.TEXT_TYPE[reaccion.tipo]) self.TablaReacciones.setValue( fila, 3, reaction.Reaction.TEXT_PHASE[reaccion.fase]) self.TablaReacciones.item( fila, 4).setFlags(QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable) for i in range(4): self.TablaReacciones.resizeColumnToContents(i) self.changed.emit() def botonGuardarClicked(self): fname = str( QtWidgets.QFileDialog.getSaveFileName( self, QtWidgets.QApplication.translate("pychemqt", "Save reaction to file"), "./", QtWidgets.QApplication.translate("pychemqt", "reaction file") + " (*.rec)")[0]) if fname: if fname.split(".")[-1] != "rec": fname += ".rec" pickle.dump(self.reacciones, open(fname, "w")) def botonNewClicked(self): dialog = UI_reacciones(parent=self) if dialog.exec_(): pass def botonEditClicked(self, bool): if bool: indice = self.TablaReacciones.currentRow() reaccion = self.reacciones[indice] dialogo = UI_reacciones(reaccion, self) dialogo.exec_() # self.rellenar(self.reaccion) # self.activo=indice else: self.botonAddClicked(self.activo, False) self.reacciones[self.activo] = self.reaccion self.TablaReacciones.setCurrentCell(self.activo, 0) self.activo = -1 self.changed.emit() self.botonNew.setEnabled(not bool) self.botonDelete.setEnabled(not bool) self.botonClear.setEnabled(not bool) self.botonAdd.setEnabled(not bool) self.botonAbrir.setEnabled(not bool) self.botonGuardar.setEnabled(not bool) def botonDeleteClicked(self): indice = self.TablaReacciones.currentRow() self.TablaReacciones.removeRow(indice) del self.reacciones[indice] self.TablaReacciones.clearSelection() self.actualizarBotones(False) self.changed.emit() def botonClearClicked(self): if self.reacciones: self.reacciones = [] self.TablaReacciones.setRowCount(0) self.botonGuardar.setEnabled(False) def botonAddClicked(self, fila, add=True): if add: fila = self.TablaReacciones.rowCount() self.TablaReacciones.addRow() self.TablaReacciones.setValue(fila, 0, self.Formula.text()) self.TablaReacciones.setValue(fila, 1, "%0.4e" % self.Hr.value.config(), QtCore.Qt.AlignRight) self.TablaReacciones.setValue( fila, 2, str(self.tipo.currentIndex() + 1) + " - " + self.tipo.currentText()) self.TablaReacciones.setValue(fila, 3, self.Fase.currentText()) self.TablaReacciones.item(fila, 4).setFlags(QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable) for i in range(4): self.TablaReacciones.resizeColumnToContents(i) self.reacciones.insert(fila, self.reaccion) self.botonGuardar.setEnabled(True) self.changed.emit()
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 ElementDialog(QtWidgets.QDialog): """Dialog to show all element properties""" def __init__(self, elemento, parent=None): super(ElementDialog, self).__init__(parent) self.setWindowTitle(QtWidgets.QApplication.translate( "pychemqt", "Properties of "+elemento.name)) lyt = QtWidgets.QVBoxLayout(self) tabWidget = QtWidgets.QTabWidget() lyt.addWidget(tabWidget) buttonbox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Close) buttonbox.rejected.connect(self.reject) lyt.addWidget(buttonbox) tabGeneral = QtWidgets.QWidget() layoutGeneral = QtWidgets.QGridLayout(tabGeneral) layoutGeneral.addWidget(QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Name:")), 1, 1) layoutGeneral.addWidget(QtWidgets.QLabel(elemento.name), 1, 2) layoutGeneral.addWidget(QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Serie:")), 2, 1) layoutGeneral.addWidget(QtWidgets.QLabel(elemento.serie), 2, 2) layoutGeneral.addWidget(QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Group")), 3, 1) layoutGeneral.addWidget(QtWidgets.QLabel(str(elemento.group)), 3, 2) layoutGeneral.addWidget(QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Period")), 4, 1) layoutGeneral.addWidget(QtWidgets.QLabel(str(elemento.period)), 4, 2) layoutGeneral.addWidget(QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Block")), 5, 1) layoutGeneral.addWidget(QtWidgets.QLabel(elemento.block), 5, 2) layoutGeneral.addItem(QtWidgets.QSpacerItem( 20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed), 6, 1) label = QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "History")) font = QtGui.QFont() font.setWeight(75) font.setBold(True) label.setFont(font) layoutGeneral.addWidget(label, 7, 1, 1, 3) label_8 = QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Discovery") + ": " + elemento.country + "(" + elemento.country + ")" +os.linesep + QtWidgets.QApplication.translate("pychemqt", "Discovered by ") + elemento.discover + os.linesep + QtWidgets.QApplication.translate("pychemqt", "Etymology") + ": " + elemento.etymology) label_8.setMargin(5) label_8.setWordWrap(True) layoutGeneral.addWidget(label_8, 8, 1, 1, 3) self.botoncito = QtWidgets.QLabel() self.botoncito.setStyleSheet( "background-color: %s;" % elemento.color) self.botoncito.setFrameShape(QtWidgets.QFrame.StyledPanel) self.botoncito.setFixedSize(60, 60) layoutGeneral.addWidget(self.botoncito, 1, 5, 3, 1) label = QtWidgets.QLabel() label.setText(str(elemento.id)) label.setAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignBottom) layoutGeneral.addWidget(label, 1, 5) label = QtWidgets.QLabel(elemento.symbol) font.setPointSize(12) label.setFont(font) label.setAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignBottom) layoutGeneral.addWidget(label, 2, 5) layoutGeneral.addItem(QtWidgets.QSpacerItem( 20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 9, 3) tabWidget.addTab(tabGeneral, QtWidgets.QApplication.translate( "pychemqt", "General")) tabFisica = QtWidgets.QWidget() lytphy = QtWidgets.QGridLayout(tabFisica) lytphy.addWidget(QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Fase:")), 1, 1) lytphy.addWidget(QtWidgets.QLabel(elemento.phase + " a 0ºC"), 1, 2, 1, 1) if elemento.density_Solid: lytphy.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Solid Density:")), 2, 1) lytphy.addWidget(self.drawData( unidades.Density, elemento.density_Solid, "gcc", txt=" @ 20ºC"), 2, 2) if elemento.density_Liq: lytphy.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Liquid Density:")), 3, 1) lytphy.addWidget(self.drawData( unidades.Density, elemento.density_Liq, "gcc", txt=" " + QtWidgets.QApplication.translate("pychemqt", "at melting point")), 3, 2) if elemento.density_Gas: lytphy.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Gas Density:")), 4, 1) lytphy.addWidget(self.drawData( unidades.Density, elemento.density_Gas, "gl", txt=" @ 0ºC"), 4, 2) lytphy.addWidget(QtWidgets.QLabel( QtWidgets.QApplication.translate("pychemqt", "Appearance:")), 5, 1) label = QtWidgets.QLabel(elemento.appearance) label.setWordWrap(True) lytphy.addWidget(label, 5, 2) lytphy.addItem(QtWidgets.QSpacerItem( 20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed), 6, 1, 1, 3) label = QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Thermal properties")) label.setFont(font) lytphy.addWidget(label, 7, 1) lytphy.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Melting point:")), 8, 1) self.punto_fusion = self.drawData( unidades.Temperature, elemento.Tf) lytphy.addWidget(self.punto_fusion, 8, 2) lytphy.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Boiling point:")), 9, 1) self.punto_ebullicion = self.drawData( unidades.Temperature, elemento.Tb) lytphy.addWidget(self.punto_ebullicion, 9, 2) lytphy.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Heat of fusion:")), 10, 1) self.calor_fusion = self.drawData( unidades.MolarEnthalpy, elemento.Heat_f, "kJkmol") lytphy.addWidget(self.calor_fusion, 10, 2) lytphy.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Heat of vaporization:")), 11, 1) self.calor_vaporizacion = self.drawData( unidades.MolarEnthalpy, elemento.Heat_b, "kJkmol") lytphy.addWidget(self.calor_vaporizacion, 11, 2) lytphy.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Specific heat capacity:")), 12, 1) self.capacidad_calorifica = self.drawData( unidades.SpecificHeat, elemento.Cp, "JgK") lytphy.addWidget(self.capacidad_calorifica, 12, 2) lytphy.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Thermal conductivity:")), 13, 1) self.conductividad_termica = self.drawData( unidades.ThermalConductivity, elemento.k, txt=" @ 300K") lytphy.addWidget(self.conductividad_termica, 13, 2) lytphy.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Debye Temperature:")), 14, 1) self.temperatura_debye = self.drawData( unidades.Temperature, elemento.T_debye) lytphy.addWidget(self.temperatura_debye, 14, 2) lytphy.addItem(QtWidgets.QSpacerItem( 20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 15, 1, 1, 3) tabWidget.addTab(tabFisica, QtWidgets.QApplication.translate( "pychemqt", "Physical properties")) tabAtom = QtWidgets.QWidget() lyt_A = QtWidgets.QGridLayout(tabAtom) lyt_A.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Atomic mass:")), 1, 1) if elemento.atomic_mass: self.masa_atomica = QtWidgets.QLabel( str(elemento.atomic_mass) +" g/mol") else: self.masa_atomica = QtWidgets.QLabel(elemento.atomic_mass) lyt_A.addWidget(self.masa_atomica, 1, 2) lyt_A.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Atomic Volume:")), 2, 1) self.volumen_atomico = self.drawData(unidades.MolarVolume, elemento.atomic_volume) lyt_A.addWidget(self.volumen_atomico, 2, 2) lyt_A.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Atomic radius:")), 3, 1) if elemento.atomic_radius: self.radio_atomico = QtWidgets.QLabel( str(elemento.atomic_radius) + " pm") else: self.radio_atomico = QtWidgets.QLabel(elemento.atomic_radius) lyt_A.addWidget(self.radio_atomico, 3, 2) lyt_A.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Covalent radius:")), 4, 1) if elemento.covalent_radius: self.radio_covalente = QtWidgets.QLabel( str(elemento.covalent_radius) + " pm") else: self.radio_covalente = QtWidgets.QLabel( str(elemento.covalent_radius)) lyt_A.addWidget(self.radio_covalente, 4, 2) lyt_A.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Van der Waals radius:")), 5, 1) if elemento.vanderWaals_radius: self.radio_waals = QtWidgets.QLabel( str(elemento.vanderWaals_radius) + " pm") else: self.radio_waals = QtWidgets.QLabel( str(elemento.vanderWaals_radius)) lyt_A.addWidget(self.radio_waals, 5, 2) lyt_A.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Ionic radii:")), 6, 1) if elemento.ionic_radii: self.radio_ionico = QtWidgets.QLabel( str(elemento.ionic_radii) + " pm") else: self.radio_ionico = QtWidgets.QLabel(str(elemento.ionic_radii)) lyt_A.addWidget(self.radio_ionico, 6, 2) lyt_A.addItem(QtWidgets.QSpacerItem( 20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed), 7, 1, 1, 3) label = QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Electronic properties")) label.setFont(font) lyt_A.addWidget(label, 8, 1) lyt_A.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Electronic configuration:")), 9, 1) lyt_A.addWidget(QtWidgets.QLabel( elemento.electron_configuration), 9, 2) lyt_A.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Oxidation states:")), 10, 1) lyt_A.addWidget(QtWidgets.QLabel( elemento.oxidation), 10, 2) lyt_A.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Electronegativity:")), 11, 1) lyt_A.addWidget(QtWidgets.QLabel( str(elemento.electronegativity)), 11, 2) lyt_A.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Electron affinity:")), 12, 1) self.afinidad_electronica = self.drawData( unidades.MolarEnthalpy, elemento.electron_affinity, "kJkmol") lyt_A.addWidget(self.afinidad_electronica, 12, 2) lyt_A.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "1st ionization energy:")), 13, 1) self.energia_ionizacion = self.drawData( unidades.MolarEnthalpy, elemento.first_ionization, "kJkmol") lyt_A.addWidget(self.energia_ionizacion, 13, 2) lyt_A.addItem(QtWidgets.QSpacerItem( 20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 14, 1, 1, 3) tabWidget.addTab(tabAtom, QtWidgets.QApplication.translate( "pychemqt", "Atomic properties")) tabCristal = QtWidgets.QWidget() lyt_C = QtWidgets.QGridLayout(tabCristal) lyt_C.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Lattice type:")), 1, 1) lyt_C.addWidget(QtWidgets.QLabel( elemento.lattice_type), 1, 2) lyt_C.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Space group:")), 2, 1) lyt_C.addWidget(QtWidgets.QLabel( elemento.space_group), 2, 2) lyt_C.addWidget(QtWidgets.QLabel( QtWidgets.QApplication.translate( "pychemqt", "Lattice edge lengths:")), 3, 1) self.lados = QtWidgets.QLabel() if elemento.lattice_edges: self.lados.setText("%spm, %spm, %spm" % ( elemento.lattice_edges[0], elemento.lattice_edges[1], elemento.lattice_edges[2])) else: self.lados.setText(elemento.lattice_edges) lyt_C.addWidget(self.lados, 3, 2) lyt_C.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Lattice angles:")), 4, 1) self.angulos = QtWidgets.QLabel() if elemento.lattice_angles: self.angulos.setText("%sº, %sº, %sº" % ( elemento.lattice_angles[0], elemento.lattice_angles[1], elemento.lattice_angles[2])) else: self.angulos.setText(elemento.lattice_angles) lyt_C.addWidget(self.angulos, 4, 2) lyt_C.addWidget(QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Lattice unit volume:")), 5, 1) self.volumen_celda = QtWidgets.QLabel() if elemento.lattice_angles: self.volumen_celda.setText("%0.5f mm<sup>3</sup>" % elemento.lattice_volume) else: self.volumen_celda.setText(elemento.lattice_volume) lyt_C.addWidget(self.volumen_celda, 5, 2) lyt_C.addItem(QtWidgets.QSpacerItem( 20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 6, 1, 1, 3) label = QtWidgets.QLabel(QtWidgets.QApplication.translate( "pychemqt", "Isotopes")) label.setFont(font) lyt_C.addWidget(label, 8, 1) title = [QtWidgets.QApplication.translate("pychemqt", "Mass Number"), QtWidgets.QApplication.translate("pychemqt", "Mass"), QtWidgets.QApplication.translate("pychemqt", "Abundance")] self.isotopes = Tabla(3, horizontalHeader=title, readOnly=True, stretch=True, verticalHeader=False) self.isotopes.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.isotopes.setColumn(0, [iso[0] for iso in elemento.isotopes], decimales=0) self.isotopes.setColumn(1, [iso[1] for iso in elemento.isotopes], format=1, decimales=10) self.isotopes.setColumn(2, [iso[2] for iso in elemento.isotopes], format=1, decimales=10) lyt_C.addWidget(self.isotopes, 9, 1, 1, 2) lyt_C.addItem(QtWidgets.QSpacerItem( 20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 10, 1, 1, 3) tabWidget.addTab(tabCristal, QtWidgets.QApplication.translate("pychemqt", "Crystallographic")) def drawData(self, unit, data, unidad="", txt=""): """Return a widget with the data inprint unit: unidad subclass data: value to set unidad: unit of value to show txt: opcional txt to show for unit""" if data and unidad: value = unit(data, unidad) widget = Entrada_con_unidades( unit, readOnly=True, value=value, textounidad=txt) elif data: widget = Entrada_con_unidades( unit, readOnly=True, value=data, textounidad=txt) else: widget = QtWidgets.QLabel(str(data)) return widget