单击。连接()错误

2024-05-19 12:51:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发windows10,python3.5.2

我想做的是:如果PB1(按钮1)点击,打开一个新窗口

问题:我得到一个错误

 self.PB1.clicked.connect(self.Soft_Memory())
TypeError: argument 1 has unexpected type 'NoneType' 

因为我定义了Soft_Memory(),所以我不明白为什么Soft_Memory()是非类型的。 尽管在编辑器上,.connect突出显示,并表示在“函数”中找不到引用“connect”

代码如下。我删除了部分代码,以便更好地查看。如果有人需要完整的代码,请评论

山猫

class SM_Window(QMainWindow, QWidget):
    def __init__(self, parent=None):
        super().__init__()
        self.initU()

    def initU(self):
        self.setWindowTitle("SM_Window")
        self.setGeometry(10, 30, 850, 850)

UI.py

import SM

class MainWindow(QMainWindow, QWidget):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.initUI()

    def Soft_Memory(self):
        self.SF = SM.SM_Window()
        self.SF.show()

    def Buttons(self):
        #Button for SF
        self.PB1 = QPushButton("POP", self)
        self.PB1.setToolTip("POPOPOPOPOPOP")
        self.PB1.move(100, 100)

    def Signal_to_Slot(self):
        self.PB1.clicked.connect(self.Soft_Memory())

    def initUI(self):
        self.setWindowTitle("UI")
        self.setGeometry(850, 850, 850, 850)
        self.Buttons()
        self.Signal_to_Slot()
        self.showMaximized()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec())

Tags: 代码selfinitdefconnectsfwindowclass
3条回答

self.Soft_Memory()时,使用括号调用方法。您需要的是引用该方法:

self.PB1.clicked.connect(self.Soft_Memory)

connect()方法需要一个可调用的参数。当您编写self.Soft_Memory()时,您正在调用该方法,而该调用的结果(None,因为您没有显式返回任何内容)就是传递给connect()的内容

您希望传递对方法本身的引用

self.PB1.clicked.connect(self.Soft_Memory)

@DaveyH cks和@user3419537的答案是正确的,您应该使用该方法的引用,而不是调用它:

self.PB1.clicked.connect(self.Soft_Memory)

但是,您可能经常需要在这些函数上传递参数(我当然需要)。在这些情况下,如果需要使用args,可以通过使用lambda进行变通

self.PB1.clicked.connect(lambda: myfunction(self, arg1, True, "example", arg4))

相关问题 更多 >