Помогите разобраться в PyQt5 как правильно преобразовать lineEdit к типу int и дальше работать с ним
В общем я новичок и мне надо преобразовать lineEdit, чтоб они воспринимали числа. Я создал в Qt Designer , преобразовал свой tst.ui в testy.py и создал еще один файл Count в который импортировал testy.py.
В написал простую функцию, которая должна сложить 2 числа из (lineEdit и lineEdit_2) и после нажатия на кнопку присвоить lineEdit_3 результат.
Программа запускается, но ничего не работает. Подскажите в чем ошибка пожалуйста.
Вот testy.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(199, 240)
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(50, 30, 113, 20))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(Form)
self.lineEdit_2.setGeometry(QtCore.QRect(50, 70, 113, 20))
self.lineEdit_2.setObjectName("lineEdit_2")
self.lineEdit_3 = QtWidgets.QLineEdit(Form)
self.lineEdit_3.setGeometry(QtCore.QRect(50, 120, 113, 20))
self.lineEdit_3.setObjectName("lineEdit_3")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(60, 170, 91, 23))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "Сложить"))
Вот Count.py:
from PyQt5 import QtCore, QtGui, QtWidgets
from testy import Ui_Form
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
def count():
a = int(ui.lineEdit.text())
b = int(ui.lineEdit_2.text())
ui.lineEdit_3.setText(a + b)
ui.pushButton.clicked.connect(count)
sys.exit(app.exec_())
Ответы (2 шт):
text() из QLineEdit это обычный QString, поэтому используйте int x = ui.lineEdit_2.text().toInt();
А вообще, если предполагаете только числовые значения, логичнее использовать QSpinBox и получать значение как int x = ui.spinbox.value();
QLineEdit::setText(const QString &)
Установка этого свойства очищает выделение, очищает историю отмен / повторов, перемещает курсор в конец строки и сбрасывает измененное свойство в false. Текст не проверяется при вставке с помощью setText().
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#from testy import Ui_Form
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(199, 240)
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(50, 30, 113, 20))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(Form)
self.lineEdit_2.setGeometry(QtCore.QRect(50, 70, 113, 20))
self.lineEdit_2.setObjectName("lineEdit_2")
self.lineEdit_3 = QtWidgets.QLineEdit(Form)
self.lineEdit_3.setGeometry(QtCore.QRect(50, 120, 113, 20))
self.lineEdit_3.setObjectName("lineEdit_3")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(60, 170, 91, 23))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "Сложить"))
class Widget(QtWidgets.QWidget, Ui_Form):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.add_a_b)
def add_a_b(self):
a = int(self.lineEdit.text())
b = int(self.lineEdit_2.text())
self.lineEdit_3.setText(str(a + b)) # - (a + b)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
