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 固有ではありません。質問は次のとおりです。
- QTextEditではなく、QLineEditでは警告なしで機能するのはなぜですか?
- このような状況に対処する正しい方法は何ですか?