如何在PyQt5中使用按键事件

保罗

我想在“ LE1”中输入数字并按键盘上的“ Enter”键时运行“添加”功能。选择行进行编辑时,我还希望行编辑清除其文本。

from PyQt5 import QtWidgets, QtCore
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QLineEdit, QLabel, QGridLayout, QWidget, QDialog

class MyWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)
        self.Glayout = QGridLayout(centralWidget)
        self.LE1 = QLineEdit('Input Number',self)
        self.LE1.keyPressEvent(self.KPE)
        Label1 = QLabel('+ 1 =',self)
        self.LE2 = QLineEdit(self)
        self.Glayout.addWidget(self.LE1)
        self.Glayout.addWidget(Label1)
        self.Glayout.addWidget(self.LE2)



    def Add(self):
        Num = float(self.LE1.text())
        math = Num + 1
        ans = str(math)
        self.LE2.setText(ans)



    def KPE(self):
        if event.key() == Qt.Key_Enter:
            self.Add()



if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())
永乐

keyPressEvent是一种方法,如果您以这种方式覆盖它,则会丢失默认行为,此外,由于QLineEdit具有returnPressed信号来通知是否Enter按下,因此它是不必要的

另一方面,将字符串转换为浮点型可能会引发异常,因此您应避免这种情况,另一个更好的选择是使用仅允许使用QSpinBox或QDoubleSpinBox数值的小部件,或者至少限制输入到带有QValidator的QLineEdit。

最后,不要将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_())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PyQt5 如何在 QLineEdit 中显示按键输入?

如何在 asyncio 和 PyQt5 事件循环中使用回调和期货?

PyQt5:如何在 PyQt5 中使用进度条?

如何在Python中使用PyQt5绘制折线?

如何在 matplotlib 和 pyqt5 中使用 BytesIO?

如何在AngularJS中使用按键事件?

如何在组中使用按键事件?

如何在PyQt5中使用全局键盘快捷键显示QMenu?

如何在PyQt5中使用多个UI文件

如何在pyqt5中使用拆分器切换布局?

如何在pyqt5中使用lineEdit输入更改cwd

QDialog - 如何在pyqt5中使用自定义按钮关闭

您可以在 Qt Designer (PyQt5) 中配置按键事件处理吗?

我如何在pyqt5中使用QTextEdit来显示html的所有样式(包括CSS的样式)

如何在PyQt5中使用移动命令根据标签的中心而不是其左角放置标签

如何在PyQt5中获取变量值,外部事件过滤器方法?

如何在PyQt5中允许Tab键按下事件

如何在PyQt5中使Matplotlib图交互式

在PyQt5的事件循环中使用pyudev.pyqt5

如何在 PyQt5 中使用 pymupdf 读取 pdf 文件?

如何在PyQt5应用程序中使用Mutagen显示专辑封面?

PyQt5:如何在不同的类中使用Slot + Signal?

如何在 PyQt5 中使用 QPainter 显示我正在绘制的线条的预览

如何在 PyQt5 中使用活动的 QComboBox 作为 QListView 的元素?

如何在PyQT5对话窗口中记录按键组合

如何停止等待键盘+ PyQt5中单独线程模块中的按键?

如何使在QTablewidget的过滤器中使用的菜单栏在pyqt5中可滚动?

在PyQt5中使用QDrag拖动QPushButton时如何显示?

PyQt5 / Python-只需1次按键即可调用多个按键事件