clicked.connect() 错误
- 2025-04-15 09:20:00
- admin 原创
- 27
问题描述:
我正在使用 Windows 10,PyCharm-Python 3.5.2
我想要做的是:如果单击 PB1(按钮 1),则打开一个新窗口。
问题:我收到错误
self.PB1.clicked.connect(self.Soft_Memory())
TypeError: argument 1 has unexpected type 'NoneType'
因为我定义了 Soft_Memory(),所以我不明白为什么 Soft_Memory() 是 NoneType。虽然在编辑器中“.connect”被高亮显示,并提示“在‘函数’中找不到引用‘connect’”。
代码如下。为了方便查看,我删除了部分代码。如果需要完整代码,请留言。
SM.py
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)
用户界面.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())
解决方案 1:
该connect()
方法需要一个可调用参数。当您编写时self.Soft_Memory()
,您正在调用该方法,并且该调用的结果(None
,因为您没有显式返回任何内容)就是传递给 的内容connect()
。
您想传递对方法本身的引用。
self.PB1.clicked.connect(self.Soft_Memory)
解决方案 2:
@DaveyH-cks 和 @user3419537 的回答是正确的,您应该使用方法的引用,而不是调用它:
self.PB1.clicked.connect(self.Soft_Memory)
但是,你可能经常需要在这些函数中传递参数(我当然会这么做)。在这种情况下,如果你需要使用参数,可以使用lambda来解决这个问题。
self.PB1.clicked.connect(lambda: myfunction(self, arg1, True, "example", arg4))
解决方案 3:
当你写的时候,self.Soft_Memory()
你用括号来调用方法。你想要的是引用方法:
self.PB1.clicked.connect(self.Soft_Memory)
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD