Python 类中尚未声明主窗口的插槽

Python 类中尚未声明主窗口的插槽,python,pyqt,pyqt4,slots,Python,Pyqt,Pyqt4,Slots,主窗口在Class1中声明。我试图创建一个Class2的对象,创建一个小部件(一个按钮)并将其连接到插槽 import sys from PyQt4 import QtGui,QtCore class Class2(object): def __init__(self,parent): return def button(self,parent): self.print_button=QtGui.QPushButton("print hello"

主窗口在Class1中声明。我试图创建一个Class2的对象,创建一个小部件(一个按钮)并将其连接到插槽

import sys
from PyQt4 import QtGui,QtCore

class Class2(object):
    def __init__(self,parent):
        return
    def button(self,parent):
        self.print_button=QtGui.QPushButton("print hello",parent)
        self.print_button.show()
        self.print_button.clicked.connect(self.print_hello)

    def print_hello(self,parent):
        print 'hello'



class Class1(QtGui.QMainWindow):
    def __init__(self):
        super(Class1, self).__init__()
        self.welcomeScreen()

    def welcomeScreen(self):
        obj=Class2(self)
        obj.button(self)


def main():
    app = QtGui.QApplication(sys.argv)
    mw = Class1()
    mw.show()
    sys.exit(app.exec_())


if __name__=='__main__':
    main()

现在,按钮已创建,但插槽不工作。如何处理此问题?

您的
print\u hello
接受两个参数,您只传递一个参数

试试这个:

self.print_button.clicked.connect(lambda: self.print_hello(self))

我不明白兰姆达的意思??为什么它不在没有lambda的情况下运行?因为必须将指针传递给lambda返回的函数。如果没有lambda
self.print\u hello(self)
将返回
None
,因此
None
将作为函数指针传递,因此插槽将不起作用。Lambda是一个非常好的工具。它创建了一个新的“匿名”函数,该函数执行我们定义的操作并返回指向它的指针。在本例中,它运行
self.print\u hello(self)
。没有lambda,我们无法将参数传递给指针。实际上,OP正在使用新的样式信号,请检查,请更新您的帖子以反映这一点。这是od,d,因为我在某个地方读到这是一种新样式,我一直在用这种方式:O无论如何,谢谢您指出这一点。