首页 > 解决方案 > PyQt5 将 textChanged 信号连接到 QPlainTextEdit

问题描述

所以我目前正在研究 PyQt5 GUI,并且总是需要将一些信号连接到方法调用。自然,我已经查找了一个标准语法来做到这一点,并在整个项目中使用它(到目前为止,它一直在使用超过 20 个不同的信号)该语法是:self.widget.signal.connect(lambda x: whatever)

因此,我最近将 QPlainTextEdit 信号“textChanged()”连接到我的一种方法,但它不起作用。我尝试用简单的print(text)替换我的方法,但这没有帮助。我的下一步是测试同一个小部件的另一个信号是否有效并且确实有效!所以现在我有以下代码:

self.plainTextEdit.textChanged.connect(lambda x: print("testTextChanged"))
self.plainTextEdit.blockCountChanged.connect(lambda x: print("blockCountChanged"))

上面的信号不会触发,但下面的会触发。

我已经阅读了 QPlainTextEdit 的文档,textChanged()应该是此类的有效信号。我还在我的项目中的几个 QLineEdits 上使用了相同的信号。

有没有人怀疑为什么会发生这种行为?也许我确实犯了一个我无法识别的错误。(我试图通过简单地在 GUI 上的 textBox 中输入来触发信号,而当我在编辑时按 enter 时会触发 blockCountChanged get)

标签: pythonqtpyqtpyqt5

解决方案


因此,musicalamente的评论(对问题的评论)确实回答了它。它不起作用的原因是,因为QPlainTextEdit的textChanged信号没有任何参数(QLineEdit textChanged做fe)。这就是为什么 lambda 不应该有参数 -> 正确的代码应该是:

self.plainTextEdit.textChanged.connect(lambda: print("testTextChanged"))

PS:如果有人搜索相同的东西,只需回答这个问题。


推荐阅读