None 有时是假的

None is False sometimes

我不明白为什么 None 默认参数使用相同的语法打印两个不同的东西。

class LoaderForm(QtWidgets.QDialog, Ui_Dialog):
    def __init__(self, parent=None):
        print("Parent is: " + str(parent))
        self.button_Load.clicked.connect(self.load_project)

    def load_project(self, projectname=None):
        print("pojectname is: " + str(projectname))

>>> Parent is: None
>>> pojectname is: False

为什么?我仔细检查了几次代码,我找不到它的逻辑。值得一提的是,我注意到这试图在 load_project 方法中使用 projectname 的条件:

        if projectname is None:
            #do something

这当然行不通,因为 projectname 显然是无缘无故的 False。

函数是 Python 中的第一个 class 对象。它可以传递给另一个函数,就像任何其他对象一样。这正是 self.button_Load.clicked.connect(self.load_project).

正在发生的事情

所以你需要看看 self.button_Load.clicked.connect 对你的 self.load_project 方法做了什么。在这里,它传递了参数 False,它覆盖了默认的 None.

这里是重现您的问题的最小示例:

class MyClass():
    def __init__(self):
        self.connect(self.foo)

    def connect(self, func):
        func(False)

    def foo(self, var=None):
        print('Var is ' + str(var))

A = MyClass()

# Var is False

我认为 clicked 有一个带有默认值的参数,例如 clicked=false 转发给 load_project 并覆盖 projectname=None