7

TCPカスタム シグナル (クライアント クラス内) を、サーバーから送信されたデータなどでログを更新するメソッドに接続しようとしています。

TCPクライアントクラスの宣言は次のとおりです。

class CarSocket(QObject):
    logSignal = Signal(str, str)
    ...
    def __init__(self, ...):
        super(CarSocket, self).__init__()
        ...

そして、私が接続しようとしている方法logSignal:

def addToLog(self, text, mode='NORMAL'):
    if mode == 'RAW':
        toAdd = text
    else:
        toAdd = "<p>{}</p> \n <hr> \n".format(text)
    self.log.logEdit.append(toAdd)

したがって、アプリケーションを初期化するときに次の行を記述します。

self.carSocket.logSignal.connect(self.addToLog)

そして、実行すると本当に奇妙なバグが発生します。

Traceback (most recent call last):
  File "/home/ahmed/workspace/autonomee/main.py", line 286, in <module>
    window = MainWindow()
  File "/home/ahmed/workspace/autonomee/main.py", line 115, in __init__
    self.carSocket.logSignal.connect(self.addToLog)
TypeError: connect() takes exactly 3 arguments (4 given)
[Finished in 0.5s with exit code 1]

誰でも助けることができますか?

私はすでに別のクラスにカスタムシグナルを正常に接続しており(クラス自体のメソッドに接続されたintを使用)、「デフォルト」シグナルをデフォルトスロット(self.button.clicked.connect(self.edit.clear)または同様のもの)に接続することに問題はないことに注意する必要があります。

4

2 に答える 2

12

私自身のコードでこの問題が発生したばかりで、私が(考えている)答えを提供したいと考えていました。CarSocket クラスには「connect」という関数もあります。その関数の名前を変更して、何が起こるか見てみましょう。

私の場合、信号を発していたクラスの 1 つにも「接続」機能があり、名前を変更すると問題が解決しました。Signal() 型自体から connect を呼び出しているため、問題は発生しないはずですが、問題があるようです。

于 2013-06-21T01:31:04.043 に答える
0

プログラムを実行しようとすると、同じエラーが発生します。本当に奇妙に見えます。ここでそれについての言及は1つだけ見つかりましたが、解決策はありません。私があなたに提案できることの1つは、古いスタイルconnectがまだ正しく機能することです:

self.connect(self.carSocket, SIGNAL("logSignal(str, str)"), self, SLOT("addToLog(str, str)"))

PySide のバグの可能性があります。コメントでは、PySide 1.1.2 に問題はないと述べています。私もこのバージョンとバージョン 4.8.4 の Qt を持っています。

于 2013-05-22T17:12:43.813 に答える