Slicer
qtを使用して、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つの方法をすべて使用しましたが、別の問題があります。
QSignalMapper
PyQt/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)])
私の質問が以前に尋ねられていないことを願っています。あなたが私を助けてくれることを願っています.
ありがとう!