1

En esta oportunidad quiero que mi programa haga dos calculos comprobando si se cumple las siguientes condiciones Si la longitud de las entradas QlineEdit:

resSTd, accSTD, UncSTD, repUUT, resUUT

es 0 me diga que "Faltan datos"

Si las mismas entradas estan llenas excepto la entrada de RepUUT, que estara en estado disable (desactivadad) hasta que check button se aplique Haga un calculo sin tomar esa entrada

si todas las entradas estan llenas, entoces que realice los calculos tomando los valores de todas las entradas.

    def Condition1(self):
    return len(self.resUUT.text()) != 0 and len(self.resSTD.text()) != 0 and len(self.accSTD.text()) != 0 and len(self.repUUT.text()) > 0

def Condition2(self):
    return len(self.resUUT.text()) != 0 and len(self.resSTD.text()) != 0 and len(self.accSTD.text()) != 0 and len(self.repUUT.text()) ==0

Imagen de pequeno Programa de calculo

Con el Siguiente Codigo

    def calcular(self):

    if self.Condition1() :

        x = float(self.resSTD.text()) / math.sqrt(3)
        y = float(self.accSTD.text()) / math.sqrt(3)
        z = float(self.uncSTD.text()) / float(2)
        u = float(self.resUUT.text()) / math.sqrt(3)
        v1 = float(self.repUUT.text())

        Rs = math.sqrt((x ** 2) + (y ** 2) + (z ** 2) + (u ** 2) + (v1 ** 2))
        RsExp = Rs * 2
        ResText = str(RsExp)

        self.resultado.setText(ResText)




    if self.Condition1 ():
       x = float(self.resSTD.text()) / math.sqrt(3)
       y = float(self.accSTD.text()) / math.sqrt(3)
       z = float(self.uncSTD.text()) / float(2)
       u = float(self.resUUT.text()) / math.sqrt(3)
       v = float(self.resUUT.text()) / float(2)


       Rs = math.sqrt((x ** 2) + (y ** 2) + (z ** 2) + (u ** 2) + (v ** 2))
       RsExp = Rs * 2
       ResText = str(RsExp)
       self.resultado.setText(ResText)



    else:

        self.resultado.setText("Faltan DaTos")

Y La Que Obtengo al Realizar el calculo es se cumple una condicion pero en otro caso solo se cumple else

introducir la descripción de la imagen aquí

1 Answers1

2

Unas cuantas observaciones:

  • Las condiciones tienen que ser excluyentes, usa un if - elif - else no if - if - else.

  • Para repUUT Deberías comprobar si el checkbox está o no seleccionado no si el QLine tiene texto.

  • Debes contemplar el caso en el que el checkbox esté seleccionado pero que no se ingresara nada en repUUT.

Te dejo un ejemplo completo reproducible:

import sys
import math

from PyQt5 import QtCore, QtGui, QtWidgets


class Ventana(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(291, 414)
        self.centralwidget = QtWidgets.QWidget(self)
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 30, 121, 18))
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(20, 70, 121, 18))
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(20, 110, 121, 18))
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(20, 150, 121, 18))
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(20, 200, 121, 18))
        self.resSTD = QtWidgets.QLineEdit(self.centralwidget)
        self.resSTD.setGeometry(QtCore.QRect(130, 20, 113, 32))
        self.accSTD = QtWidgets.QLineEdit(self.centralwidget)
        self.accSTD.setGeometry(QtCore.QRect(130, 60, 113, 32))
        self.uncSTD = QtWidgets.QLineEdit(self.centralwidget)
        self.uncSTD.setGeometry(QtCore.QRect(130, 100, 113, 32))
        self.resUUT = QtWidgets.QLineEdit(self.centralwidget)
        self.resUUT.setGeometry(QtCore.QRect(130, 140, 113, 32))
        self.repUUT = QtWidgets.QLineEdit(self.centralwidget)
        self.repUUT.setGeometry(QtCore.QRect(130, 190, 113, 32))
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(250, 200, 88, 22))
        self.checkBox.setText("")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(160, 360, 88, 34))
        self.resultado = QtWidgets.QLabel(self.centralwidget)
        self.resultado.setGeometry(QtCore.QRect(10, 290, 271, 41))
        self.resultado.setText("")
        self.label.setText("Resolution STD")
        self.label_2.setText("Accuracy UUT")
        self.label_3.setText("Uncertainty STD")
        self.label_4.setText("Resolution UUT")
        self.label_5.setText("Repetibilidad")
        self.pushButton.setText("Button")
        self.repUUT.setEnabled(False)
        self.pushButton.clicked.connect(self.calcular)
        self.checkBox.stateChanged.connect(lambda: self.repUUT.setEnabled(True if self.checkBox.checkState() else False))
        self.setCentralWidget(self.centralwidget)


    @QtCore.pyqtSlot() 
    def calcular(self):
        # Todas las entradas menos repUUT tinen algo
        if all((self.resSTD.text(), self.accSTD.text(), self.uncSTD.text(), self.resUUT.text())):

            # El checkbutton está activado
            if self.checkBox.isChecked():
                # Si con el botón activado no se ha ingresado nada en repUUT
                if not self.repUUT.text():
                    self.resultado.setText("Faltan DaTos")
                    return
                # Si están todos los datos
                x = float(self.resSTD.text()) / math.sqrt(3)
                y = float(self.accSTD.text()) / math.sqrt(3)
                z = float(self.uncSTD.text()) / float(2)
                u = float(self.resUUT.text()) / math.sqrt(3)
                v1 = float(self.repUUT.text())

                Rs = math.sqrt((x ** 2) + (y ** 2) + (z ** 2) + (u ** 2) + (v1 ** 2))
                RsExp = Rs * 2
                ResText = str(RsExp)
                self.resultado.setText(ResText)

            # El checkbutton no está activado
            else:
                x = float(self.resSTD.text()) / math.sqrt(3)
                y = float(self.accSTD.text()) / math.sqrt(3)
                z = float(self.uncSTD.text()) / float(2)
                u = float(self.resUUT.text()) / math.sqrt(3)
                v = float(self.resUUT.text()) / float(2)

                Rs = math.sqrt((x ** 2) + (y ** 2) + (z ** 2) + (u ** 2) + (v ** 2))
                RsExp = Rs * 2
                ResText = str(RsExp)
                self.resultado.setText(ResText)

        # Alguna entrada vacía
        else:
            self.resultado.setText("Faltan DaTos")



if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    ventana = Ventana()
    ventana.show()
    app.exec_()

introducir la descripción de la imagen aquí

FJSevilla
  • 55,603
  • 7
  • 35
  • 58