有时没有错

时间:2018-07-09 11:19:40

标签: python python-3.x pyside2

我不明白为什么无默认参数以相同的语法显示两个不同的东西。

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

为什么?我多次检查了代码,但找不到逻辑。值得一提的是,我注意到这种尝试在projectname方法内为load_project使用条件的情况:

        if projectname is None:
            #do something

这当然是行不通的,因为项目名称显然是无缘无故的。

2 个答案:

答案 0 :(得分:2)

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

因此,您需要查看self.button_Load.clicked.connectself.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

答案 1 :(得分:1)

我认为clicked具有一个默认参数,例如clicked=false,该参数将转发到load_project并覆盖projectname=None