Qt QPushButton赢得';t点火线槽(QObject方法)

Qt QPushButton赢得';t点火线槽(QObject方法),qt,python-2.7,qt4,pyqt,pyside,Qt,Python 2.7,Qt4,Pyqt,Pyside,我有一个QObject,它作为控制器工作。 此QObject具有对QPushButton的引用。 此QOjbect有一个方法集,该方法集将在QPushButton的clicked事件时激发 例: 在这里,你点击的按钮不会被触发。 我试着用@Slot(),@Slot(QObject),@Slot(type),@Slot(str),@Slot(int)来装饰它,但仍然不起作用 我做错了什么 如果我使用.clicked.connect(lambda:self.button\u clicked)它当然可

我有一个QObject,它作为控制器工作。 此QObject具有对QPushButton的引用。 此QOjbect有一个方法集,该方法集将在QPushButton的clicked事件时激发

例:

在这里,你点击的按钮不会被触发。 我试着用
@Slot()
@Slot(QObject)
@Slot(type)
@Slot(str)
@Slot(int)
来装饰它,但仍然不起作用

我做错了什么

如果我使用
.clicked.connect(lambda:self.button\u clicked)
它当然可以工作。所以我假设这是一个类型不匹配,但是
@Slot(..)
装饰不应该修复它吗


谢谢。

可能是,您可以尝试
释放
信号,而不是
点击
信号,因为点击的信号是在按钮被激活时发出的(即当鼠标光标在按钮内时按下然后释放)

或者你可以尝试连接信号的方法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..."

我不知道问题是否在于@Slot()被注释了(在开头有一个#),但这段代码对我来说是可行的(它在python 3中,但只是更改了打印行)


我尝试了老式的连接方式,包括clicked()和release()事件,但仍然不起作用。我在这里真的很困惑。谢谢你的帮助。你好!我的代码库有点复杂(很多元素),在仔细阅读您的示例后,我意识到我在移动某些类时“破坏”了QMainWindow父引用。现在它起作用了。非常感谢你!我想QObject引用是不够的。
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..."
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)