Не удается выполнить валидацию
Нужна проверка на то, что вводимые значения были равны 0 или 1.
Например, ввели значения 1, 1, 0, 1, то тогда будет выполняться сумма.
Если же ввели значения 0, 1, 0, 2, то тогда система выдает сообщение об ошибке:
"Все поля должны быть заполнены значениями 0 или 1".
Но функция def rst(self) не выполняет желаемое. Как правильно реализовать валидацию с таким условием?
def rst(self):
if not self.lineEdit_10.text() or not self.lineEdit_2.text() or \
not self.lineEdit_3.text() or not self.lineEdit_4.text() or \
not self.lineEdit_5.text() or not self.lineEdit_6.text() or \
not self.lineEdit_7.text() or not self.lineEdit_8.text() or \
not self.lineEdit_9.text():
self.lineEdit.setText("Все поля должны быть заполнены значениями 0 или 1")
else:
num1 = int(self.lineEdit_10.text())
num2 = int(self.lineEdit_2.text())
num3 = int(self.lineEdit_3.text())
num4 = int(self.lineEdit_4.text())
num5 = int(self.lineEdit_5.text())
num6 = int(self.lineEdit_6.text())
num7 = int(self.lineEdit_7.text())
num8 = int(self.lineEdit_8.text())
num9 = int(self.lineEdit_9.text())
s = num1 + num2 + num3 + num4 + num5 + num6 + num7 + num8 + num9
r = float(s / 9)
self.lineEdit.setText(str(r))
Ответы (2 шт):
Автор решения: n1tr0xs
→ Ссылка
def rst(self):
edits = [self.lineEdit_10, self.lineEdit_2, ...]
texts = [e.text() for e in edits]
for t in texts:
if t not in ('0', '1'):
self.lineEdit.setText('Все поля должны быть заполнены значениями 0 или 1')
break
else:
s = sum(map(int, texts))
r = s/9 # float() тут не нужен, и так будет float
self.lineEdit.setText(str(r))
Или можно так:
def rst(self):
edits = [self.lineEdit_10, self.lineEdit_2, ...]
texts = [e.text() for e in edits]
if all(t in ('0', '1') for t in texts):
s = sum(map(int, texts))
r = s/9 # float() тут не нужен, и так будет float
self.lineEdit.setText(str(r))
else:
self.lineEdit.setText('Все поля должны быть заполнены значениями 0 или 1')
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#from blok1 import Ui_MainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1598, 906)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.gridLayoutWidget.setGeometry(QtCore.QRect(50, 20, 321, 831))
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) # ???
# self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
self.gridLayoutWidget_2.setGeometry(QtCore.QRect(370, 20, 561, 831))
self.gridLayoutWidget_2.setObjectName("gridLayoutWidget_2")
self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget_2)
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
self.gridLayout_2.setObjectName("gridLayout_2")
self.lineEdit_2 = QtWidgets.QLineEdit("1", self.gridLayoutWidget_2) # "1", убрать
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout_2.addWidget(self.lineEdit_2, 10, 1, 1, 1)
self.lineEdit_4 = QtWidgets.QLineEdit("0", self.gridLayoutWidget_2) # ...
self.lineEdit_4.setObjectName("lineEdit_4")
self.gridLayout_2.addWidget(self.lineEdit_4, 9, 1, 1, 1)
self.lineEdit_6 = QtWidgets.QLineEdit("1", self.gridLayoutWidget_2)
self.lineEdit_6.setObjectName("lineEdit_6")
self.gridLayout_2.addWidget(self.lineEdit_6, 8, 1, 1, 1)
self.lineEdit_8 = QtWidgets.QLineEdit("0", self.gridLayoutWidget_2)
self.lineEdit_8.setObjectName("lineEdit_8")
self.gridLayout_2.addWidget(self.lineEdit_8, 7, 1, 1, 1)
self.lineEdit_9 = QtWidgets.QLineEdit("1", self.gridLayoutWidget_2)
self.lineEdit_9.setObjectName("lineEdit_9")
self.gridLayout_2.addWidget(self.lineEdit_9, 6, 1, 1, 1)
self.lineEdit_10 = QtWidgets.QLineEdit("0", self.gridLayoutWidget_2)
self.lineEdit_10.setObjectName("lineEdit_10")
self.gridLayout_2.addWidget(self.lineEdit_10, 5, 1, 1, 1)
self.lineEdit_3 = QtWidgets.QLineEdit("1", self.gridLayoutWidget_2)
self.lineEdit_3.setObjectName("lineEdit_3")
self.gridLayout_2.addWidget(self.lineEdit_3, 4, 1, 1, 1)
self.lineEdit_7 = QtWidgets.QLineEdit("0", self.gridLayoutWidget_2)
self.lineEdit_7.setObjectName("lineEdit_7")
self.gridLayout_2.addWidget(self.lineEdit_7, 3, 1, 1, 1)
self.lineEdit_5 = QtWidgets.QLineEdit("1", self.gridLayoutWidget_2)
self.lineEdit_5.setObjectName("lineEdit_5")
self.gridLayout_2.addWidget(self.lineEdit_5, 2, 1, 1, 1)
self.textEdit_21 = QtWidgets.QTextEdit(self.gridLayoutWidget_2)
self.textEdit_21.setObjectName("textEdit_21")
self.gridLayout_2.addWidget(self.textEdit_21, 1, 1, 1, 1)
self.gridLayoutWidget_3 = QtWidgets.QWidget(self.centralwidget)
self.gridLayoutWidget_3.setGeometry(QtCore.QRect(1200, 30, 321, 71))
self.gridLayoutWidget_3.setObjectName("gridLayoutWidget_3")
self.gridLayout_3 = QtWidgets.QGridLayout(self.gridLayoutWidget_3)
self.gridLayout_3.setContentsMargins(0, 0, 0, 0)
self.gridLayout_3.setObjectName("gridLayout_3")
self.pushButton_3 = QtWidgets.QPushButton(self.gridLayoutWidget_3)
self.pushButton_3.setObjectName("pushButton_3")
self.gridLayout_3.addWidget(self.pushButton_3, 0, 0, 1, 1)
self.pushButton_2 = QtWidgets.QPushButton(self.gridLayoutWidget_3)
self.pushButton_2.setObjectName("pushButton_2")
# НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА !!!
# ---------------------> ? <--------
# self.gridLayout_3.addWidget(self.pushButton_2, 0, 1, 1, 1)
self.gridLayout_2.addWidget(self.pushButton_2, 0, 1, 1, 1)
self.lineEdit = QtWidgets.QLineEdit("100", self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(1180, 150, 381, 61))
self.lineEdit.setObjectName("lineEdit")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1598, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Расположение органов управления в зонах моторного поля"))
self.pushButton_3.setText(_translate("MainWindow", "Рассчитать"))
self.pushButton_2.setText(_translate("MainWindow", "Очистить"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_3.clicked.connect(self.rst)
self.pushButton_2.clicked.connect(self.clr)
self.valids = ("0", "1") # +++
def clr(self):
self.lineEdit_10.clear()
self.lineEdit_2.clear()
self.lineEdit_3.clear()
self.lineEdit_4.clear()
self.lineEdit_5.clear()
self.lineEdit_6.clear()
self.lineEdit_7.clear()
self.lineEdit_8.clear()
self.lineEdit_9.clear()
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def rst(self):
if self.lineEdit_10.text() in self.valids and self.lineEdit_2.text() in self.valids and \
self.lineEdit_3.text() in self.valids and self.lineEdit_4.text() in self.valids and \
self.lineEdit_5.text() in self.valids and self.lineEdit_6.text() in self.valids and \
self.lineEdit_7.text() in self.valids and self.lineEdit_8.text() in self.valids and \
self.lineEdit_9.text() in self.valids:
num1 = int(self.lineEdit_10.text())
num2 = int(self.lineEdit_2.text())
num3 = int(self.lineEdit_3.text())
num4 = int(self.lineEdit_4.text())
num5 = int(self.lineEdit_5.text())
num6 = int(self.lineEdit_6.text())
num7 = int(self.lineEdit_7.text())
num8 = int(self.lineEdit_8.text())
num9 = int(self.lineEdit_9.text())
s = num1 + num2 + num3 + num4 + num5 + num6 + num7 + num8 + num9
r = float(s / 9)
self.lineEdit.setText(str(r))
else:
self.lineEdit.setText("Все поля должны быть заполнены значениями 0 или 1")
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())