Python 类中尚未声明主窗口的插槽
主窗口在Class1中声明。我试图创建一个Class2的对象,创建一个小部件(一个按钮)并将其连接到插槽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"
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无论如何,谢谢您指出这一点。