QTextEdit文本更改信号的异常。

3
我将使用Python3和PyQt5来创建一个包含表单元素,如QLineEditQTextEdit的应用程序。
我按照以下方式从QLineEdit中收集数据(这个方法可以正常工作):
    self.rolAdi = QtWidgets.QLineEdit(self.centralWidget)
    self.rolAdi.setObjectName("rolAdi")

    self.rolAdi.textChanged.connect(self.textSonDurum)

def textSonDurum(self, s):
    print("Text changed...>>> "+s)

然而,使用QTextEdit控件的同样方法不起作用 - 每当我改变控件的内容时,程序就会停止:

   self.IP = QtWidgets.QTextEdit(self.centralWidget)
   self.IP.setObjectName("IP")

   self.IP.textChanged.connect(self.textSonDurum)

def textSonDurum(self, s):
    print("Text changed...>>> "+s)

我研究了这个问题,发现一个建议是使用disconnect函数,但是在PyQt5中找不到它。

self.IP.textChanged.disconnect()

输出错误:

TypeError: disconnect() failed between 'textChanged' and all its connections

(完整的代码太长了,无法在这里粘贴,但如果您需要其他部分,请告诉我。)

textChanged 信号(QTextEdit)被触发时,新的文本(s 参数)不会传递到插槽中:http://doc.qt.io/qt-5/qtextedit.html#textChanged vs http://doc.qt.io/qt-5/qlineedit.html#textChanged - FJSevilla
1个回答

5

QTextEdittextChanged 信号QLineEdittextChanged 信号 签名不同,因为它不传递被更改的文本。这是因为 QTextEdit 支持富文本(即 html)以及纯文本,所以您需要明确请求所需的内容类型:

   self.IP.textChanged.connect(self.textSonDurum)

def textSonDurum(self):
    print("Text changed...>>> " + self.IP.toPlainText())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接