Exemplo n.º 1
0
    def __init__(self, equipment, entrada=True, salida=True, calculo=True,
                 parent=None):
        """
        equipment: name of equipment to model
        entrada: boolean to create or not the input tab
        salida: boolean to create or not the input tab
            - True para equipos con varias entradas/salidas, create de tab,
              the child must define the UI_corriente
            - False para equipos con una, create UI_corriente
            - None: Not create nothing
        calculo: boolean to create or not the calcule tab
        """
        super(UI_equip, self).__init__(parent)
        self.setWindowTitle(equipment.title)
        icono = os.path.join(IMAGE_PATH, "equipment",
                             "%s.png" % equipment.__name__.lower())
        self.setWindowIcon(QtGui.QIcon(QtGui.QPixmap(icono)))
        self.evaluate = Evaluate()
        self.evaluate.finished.connect(self.rellenar)

        layout = QtWidgets.QGridLayout(self)
        self.tabWidget = QtWidgets.QTabWidget()
        layout.addWidget(self.tabWidget, 0, 0, 1, 3)
        self.status = Status()
        layout.addWidget(self.status, 1, 0, 1, 1)
        self.checkIgnorar = QtWidgets.QCheckBox()
        self.checkIgnorar.setText(
            QtWidgets.QApplication.translate("pychemqt", "Ignore"))
        self.checkIgnorar.toggled.connect(self.ignorar)
        layout.addWidget(self.checkIgnorar, 1, 1, 1, 1)
        self.buttonBox = QtWidgets.QDialogButtonBox(
            QtWidgets.QDialogButtonBox.Cancel | QtWidgets.QDialogButtonBox.Ok |
            QtWidgets.QDialogButtonBox.Help)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)
        self.buttonBox.helpRequested.connect(self.ayuda)
        layout.addWidget(self.buttonBox, 1, 2, 1, 1)

        if not equipment.help:
            button = self.buttonBox.button(QtWidgets.QDialogButtonBox.Help)
            button.setVisible(False)

        # Input tab
        if entrada:
            self.Entrada = QtWidgets.QTabWidget()
            self.tabWidget.addTab(
                self.Entrada,
                QtGui.QIcon(os.path.join(IMAGE_PATH, "equipment", "in.svg")),
                QtWidgets.QApplication.translate("pychemqt", "Input"))
        elif entrada is None:
            pass
        else:
            self.Entrada = Ui_corriente()
            self.Entrada.Changed.connect(partial(self.changeParams, "entrada"))
            self.tabWidget.addTab(
                self.Entrada,
                QtGui.QIcon(os.path.join(IMAGE_PATH, "equipment", "in.svg")),
                QtWidgets.QApplication.translate("pychemqt", "Input"))

        # Calcule tab
        if calculo:
            self.tabCalculo = QtWidgets.QWidget()
            self.tabWidget.addTab(
                self.tabCalculo,
                QtGui.QIcon(os.path.join(
                    IMAGE_PATH, "button", "calculator.png")),
                QtWidgets.QApplication.translate("pychemqt", "Calculation"))

        # Cost tab
        if equipment.indiceCostos is not None:
            self.tabCostos = QtWidgets.QWidget()
            self.tabWidget.addTab(
                self.tabCostos,
                QtGui.QIcon(os.path.join(
                    IMAGE_PATH, "button", "currency.png")),
                QtWidgets.QApplication.translate("pychemqt", "Cost"))

        # Output tab
        if salida:
            self.Salida = QtWidgets.QTabWidget()
            self.tabWidget.addTab(
                self.Salida,
                QtGui.QIcon(os.path.join(IMAGE_PATH, "equipment", "out.svg")),
                QtWidgets.QApplication.translate("pychemqt", "Output"))
        elif salida is None:
            pass
        else:
            self.Salida = Ui_corriente(readOnly=True)
            self.tabWidget.addTab(
                self.Salida,
                QtGui.QIcon(os.path.join(IMAGE_PATH, "equipment", "out.svg")),
                QtWidgets.QApplication.translate("pychemqt", "Output"))

        # Notes tab
        self.tabNotas = TextEditor()
        self.tabWidget.addTab(
            self.tabNotas,
            QtGui.QIcon(os.path.join(IMAGE_PATH, "button", "editor.png")),
            QtWidgets.QApplication.translate("pychemqt", "Notes"))
        self.tabNotas.notas.textChanged.connect(self.cambiar_notas)
Exemplo n.º 2
0
    def __init__(self, reaccion=None, parent=None):
        super(UI_reacciones, self).__init__(parent)
        self.evaluate = Evaluate()
        self.evaluate.finished.connect(self.rellenar)
        self.indices, self.nombres, M = getComponents()
        gridLayout = QtWidgets.QGridLayout(self)

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

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

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

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

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

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

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

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

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

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

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

        self.check_KFijo.setChecked(True)

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

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

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

        if reaccion:
            self.setReaction(reaccion)