0

コントローラーとして機能する QObject があります。この QObject には QPushButton への参照があります。この QOjbect には、QPushButton のクリック イベントで起動されるように設定されたメソッドがあります。

元:

class MyController(QObject):
    def __init__(self, parent=None):
        super(MyController, self).__init__(parent)

        self.some_ref = ....

        self.button = self.some_ref.button (returns QPushButton)
        self.button.clicked.connect(self.button_clicked)

    # @Slot(type)
    def button_clicked(self):
        print 'button clicked: ', self.sender()
        # print 'button clicked (no sender req.)

ここでは、button_clicked は発生しません。@Slot()@Slot(QObject)@Slot(type)、で装飾しようとしましたが@Slot(str)@Slot(int)それでもうまくいきません。

私は何を間違っていますか?

私がそれを使用すれば..clicked.connect(lambda: self.button_clicked)、もちろん動作します。だから、これは型の不一致だと思いますが、@Slot(..)装飾で修正すべきではありませんか?

ありがとうございました。

4

2 に答える 2

1

問題が @Slot() がコメントされている (先頭に # がある) ことであるかどうかはわかりませんが、このコードは私にとってはうまくいきます (Python 3 にありますが、印刷行を変更するだけです)。

import sys
from PySide.QtGui import *
from PySide.QtCore import *

class Window(QMainWindow):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.button = QPushButton()
        self.button.setText("Test")
        self.setCentralWidget(self.button)

    def GetButton(self):
        return self.button


class MyController(QObject):
    def __init__(self, parent=None):
        super(MyController, self).__init__(parent)

        self.button = parent.GetButton() #(returns QPushButton)
        self.button.clicked.connect(self.button_clicked)

    @Slot()
    def button_clicked(self):
        print('button clicked: ', self.sender())

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    controller = MyController(window)
    window.show()
    app.exec_()
    sys.exit(0)
于 2013-08-06T02:51:40.183 に答える
0

releasedボタンがアクティブになったときにクリックされた信号が発せられるため、信号の代わりに信号を試すことができclickedます(つまり、マウスカーソルがボタン内にあるときに押してから離します)。

または、信号を接続する #方法 2 を試すこともできます。

class MyController(QObject):
    def __init__(self, parent=None):
        super(MyController, self).__init__(parent)

        self.some_ref = ....

        self.button = self.some_ref.button
        # method 1
        self.button.released.connect(self.button_clicked)
        # method 2
        self.connect(self.button, SIGNAL('released()'), self.button_clicked)


    def button_clicked(self):
        print "yipee it works..."
于 2013-08-05T12:11:41.627 に答える