keyPressEvent - это метод, который, если вы переопределяете его таким образом, вы теряете поведение по умолчанию, к тому же это не нужно, поскольку QLineEdit имеет сигнал returnPressed, который уведомляет, если нажата Enter .
С другой стороны, преобразование строки в плавающее может вызвать исключение, поэтому вы должны предотвратить этот случай, другой лучший вариант - использовать виджет, который допускает только числовые значения с QSpinBox или QDoubleSpinBox, или, по крайней мере, ограничить значения, которые вводятся вQLineEdit с соответствующим QValidator.
И, наконец, не используйте слово math в качестве имени переменной, поскольку это имя библиотеки, которая может вызвать проблемы в будущем.
Учитывая вышеизложенное, решение:
from PyQt5.QtWidgets import (
QApplication,
QGridLayout,
QLineEdit,
QLabel,
QMainWindow,
QWidget,
)
class MyWindow(QMainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.LE1 = QLineEdit("Input Number")
self.LE1.returnPressed.connect(self.add)
Label1 = QLabel("+ 1 =")
self.LE2 = QLineEdit()
centralWidget = QWidget()
self.setCentralWidget(centralWidget)
layout = QGridLayout(centralWidget)
layout.addWidget(self.LE1)
layout.addWidget(Label1)
layout.addWidget(self.LE2)
def add(self):
try:
num = float(self.LE1.text())
num += 1
self.LE2.setText(str(num))
except ValueError:
pass
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())