2

Slicerqtを使用して、Pythonでモジュールを開発しようとしています。ボタンのリスト ( QPushButton) があり、それぞれの"clicked"シグナルを同じメソッドにバインドするが、異なる引数を渡す必要があります (つまり、どのボタンが押されたかを知るためです)。

私が探しているのは次のようなものです:

def createButtons(self):
  for object in self.myList:
    button = qt.QPushButton(object.name)
    button.clicked.connect(self.myMethod(object.name)) # I know this is not valid

def myMethod(self, name):
  print name, 'was pressed.'

ここここで提案されている3つの方法をすべて使用しましたが、別の問題があります。

  • QSignalMapperPyQt/PySide を使用できないため、解決策はめちゃくちゃです。

  • ラムダソリューションにより、どのボタンが押されても、コードは常に最後のボタンのテキストを出力します。私は次のようなものを書きました:

    button.clicked.connect(lambda : self.myMethod(object.name))
    
  • 部分的な解決策は次のように実装されました。

    button.clicked.connect(functools.partial(self.myMethod, object.name))
    

    しかし、次のエラーが発生しました。

    TypeError: myMethod() takes exactly 2 arguments (3 given)
    

現在、私はさまざまな書かれた方法の恐ろしいリストを使用しているので、うまくいく私の醜い解決策は次のとおりです。

button.clicked.connect(self.myButtonMethods[self.myList.index(object)])

私の質問が以前に尋ねられていないことを願っています。あなたが私を助けてくれることを願っています.

ありがとう!

4

1 に答える 1

1

このページによると、4.5以降のpyQTは新しいAPIを導入しました

これを試して:

QtCore.QObject.connect(button, QtCore.SIGNAL('clicked()'), functools.partial(self.myMethod, object.name) )
于 2014-08-21T09:20:53.260 に答える