TextEdit программный способ установить текст без запуска textChanged Event? - PullRequest
0 голосов
/ 21 февраля 2019

Я использую pyQt для отображения данных в textEdit, а затем подключенный метод textChanged для отправки текста в серверное приложение.Мне нужно, чтобы такое же поведение демонстрировалось в QLineEdit.textEdited, так как textEdited в QLineEdit не запускается на setText.

Есть ли какие-либо решения для этого?Возможно, способ определить, было ли изменение программным?Заранее спасибо.

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете заблокировать передачу сигнала textChanged, используя blockSignals () метод:

from PyQt5 import QtCore, QtGui, QtWidgets

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.text_edit = QtWidgets.QTextEdit(
            textChanged=self.on_textChanged
        )
        self.setCentralWidget(self.text_edit)

        timer = QtCore.QTimer(
            self, 
            timeout=self.on_timeout
        )
        timer.start()

    @QtCore.pyqtSlot()
    def on_textChanged(self):
        print(self.text_edit.toPlainText())

    @QtCore.pyqtSlot()
    def on_timeout(self):
        self.text_edit.blockSignals(True)
        self.text_edit.setText(QtCore.QDateTime.currentDateTime().toString())
        self.text_edit.blockSignals(False)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...