Python PyQT中事件源的识别

Python PyQT中事件源的识别,python,user-interface,qt,pyqt,pyqt4,Python,User Interface,Qt,Pyqt,Pyqt4,我从PyQt4开始,现在我对事件有一个问题 我有一个主类,比如说主窗口。主窗口有ButtonX类型的按钮列表(固有表单QPushButton)。我想实现两个解决方案之一(取决于哪个更容易) 1) 单击列表中的一个按钮后,我想运行MainWindow的一个方法。我希望能够阅读事件的来源(识别点击按钮) 2) 第二种解决方案是运行ButtonX类中定义的方法 我尝试的是: QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clic

我从PyQt4开始,现在我对事件有一个问题

我有一个主类,比如说主窗口。主窗口有ButtonX类型的按钮列表(固有表单QPushButton)。我想实现两个解决方案之一(取决于哪个更容易)

1) 单击列表中的一个按钮后,我想运行MainWindow的一个方法。我希望能够阅读事件的来源(识别点击按钮)

2) 第二种解决方案是运行ButtonX类中定义的方法

我尝试的是:

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0).buttonMethod())

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0), QtCore.SLOT("incrementValue()"))
甚至这一行也出现在Python解释器中

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0), QtCore.SLOT("incrementValue"))
1) 单击列表中的一个按钮后,我想运行MainWindow的一个方法。我希望能够阅读事件的来源(识别点击按钮)

您可以使用访问事件源。但是,正如说明所示,使用或以更面向对象的方式做事情通常更好

2) 第二种解决方案是运行ButtonX类中定义的方法

仔细查看您为第一个connect调用的最后一个参数键入的内容:

self.getButton(0, 0).buttonMethod()
上面将使用参数
0、0
计算
getButton
,然后在该对象上调用
buttonMethod
方法。因此,除非
buttonMethod
返回一个方法,否则您将使用
buttonMethod
的返回值作为connect调用的最后一个参数。如果这个方法返回一个函数,那么就可以了

相反,我希望看到如下情况:

self.getButton(0, 0).buttonMethod # note no parenthesis at end
请看PyQt附带的PyQt示例目录,因为它们将演示确切的语法,并且是很好的示例

这里有一个小例子:

class MW(QMainWindow):
    def __init__(self, *args)
        QMainWindow.__init__(self, *args)
        layout = QHBoxLayout(self)
        self.b1 = QPushButton("Button1")
        self.b2 = QPushButton("Button2")
        layout.addWidget(self.b1)
        layout.addWidget(self.b2)
        self.connect(self.b1, SIGNAL("clicked()"), self.buttonWasPressed)
        self.connect(self.b2, SIGNAL("clicked()"), self.buttonWasPressed)

    def buttonWasPressed(self):
        print "button %s was pressed" % self.sender()
1) 单击列表中的一个按钮后,我想运行MainWindow的一个方法。我希望能够阅读事件的来源(识别点击按钮)

您可以使用访问事件源。但是,正如说明所示,使用或以更面向对象的方式做事情通常更好

2) 第二种解决方案是运行ButtonX类中定义的方法

仔细查看您为第一个connect调用的最后一个参数键入的内容:

self.getButton(0, 0).buttonMethod()
上面将使用参数
0、0
计算
getButton
,然后在该对象上调用
buttonMethod
方法。因此,除非
buttonMethod
返回一个方法,否则您将使用
buttonMethod
的返回值作为connect调用的最后一个参数。如果这个方法返回一个函数,那么就可以了

相反,我希望看到如下情况:

self.getButton(0, 0).buttonMethod # note no parenthesis at end
请看PyQt附带的PyQt示例目录,因为它们将演示确切的语法,并且是很好的示例

这里有一个小例子:

class MW(QMainWindow):
    def __init__(self, *args)
        QMainWindow.__init__(self, *args)
        layout = QHBoxLayout(self)
        self.b1 = QPushButton("Button1")
        self.b2 = QPushButton("Button2")
        layout.addWidget(self.b1)
        layout.addWidget(self.b2)
        self.connect(self.b1, SIGNAL("clicked()"), self.buttonWasPressed)
        self.connect(self.b2, SIGNAL("clicked()"), self.buttonWasPressed)

    def buttonWasPressed(self):
        print "button %s was pressed" % self.sender()

在qt4中,您可以使用新样式的插槽和信号,在您的示例中,它看起来像:
self.b1.clicked.connect(self.buttonwapressed)
我使用PyQt5,我收到一个错误,说发送方不存在。是否有任何解决方法。在qt4中,您可以使用新样式的插槽和信号,在您的示例中,它看起来像:
self.b1.clicked.connect(self.buttonwarpressed)
我使用PyQt5时,收到一个错误,说发件人不存在。是否有解决方法。