我不明白为什么无默认参数以相同的语法显示两个不同的东西。
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
这当然是行不通的,因为项目名称显然是无缘无故的。
答案 0 :(得分:2)
函数是Python中的一类对象。可以将其传递给另一个函数,就像其他任何对象一样。 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
答案 1 :(得分:1)
我认为clicked
具有一个默认参数,例如clicked=false
,该参数将转发到load_project
并覆盖projectname=None