Используя Python3 и PyQt4, у меня есть функция (run), которая принимает в качестве входных данных вызываемый объект для предоставления обновлений статуса.
class Windows(QtGui.QWidget):
# Creates a widget containing:
# - a QLineEdit (status_widget)
# - a button, connected to on_run_clicked
def on_run_clicked(self):
def update(text):
self.widget.setText(text)
threading.Thread(target=run, args=(update, )).start()
Это работает нормально (т.е. текстовые обновления правильно отображаются в виджете). Однако, когда я заменяю QLineEdit на QTextEdit и использую метод append для добавления текста, я получаю:
QObject :: connect: невозможно поставить в очередь аргументы типа 'QTextCursor'
(Убедитесь, что QTextCursor зарегистрирован с помощью qRegisterMetaType ().)
Он по-прежнему работает, но указывает на то, что я делаю что-то не так, и я не уверен, что продолжу работать, когда будет больше активных потоков. Обычно я делаю этот тип обновлений, используя сигналы и слоты, но функция run не зависит от PyQt. Вопросы следующие:
- Почему это работает без предупреждения для QLineEdit, а не для QTextEdit?
- Как правильно поступать в такой ситуации?