本帖最后由 上杉繪梨衣 于 2021-9-22 14:24 编辑
我用QtDesinger画了个界面,转成py文件后,我定义了一个方法如下def __Load_Render_Presets(self, uiChange):
u"""
为Ui上Render Setting Presets 选项下的项目和参数级别下拉菜单添加名称
"""
if self.uiCsArRenSetPresetsLevelSel.count():
self.uiCsArRenSetPresetsLevelSel.clear()
if uiChange == "create":
#print("uiChange = false")
self.uiCsArRenSetPresetsProjectSel.addItems([renderSettingProject for renderSettingProject in os.listdir(self.csArnoldToolRenderOptions)])
# self.uiCsArRenSetPresetsLevelSel.addItems(
# [renderSettingLevel for renderSettingLevel in os.listdir(os.path.join(self.csArnoldToolRenderOptions, self.uiCsArRenSetPresetsProjectSel.currentText()))]
# )
elif uiChange == "refresh":
print("uiChange = true")
# self.uiCsArRenSetPresetsLevelSel.addItems(
# [renderSettingLevel for renderSettingLevel in os.listdir(os.path.join(self.csArnoldToolRenderOptions, self.uiCsArRenSetPresetsProjectSel.currentText()))]
# )
然后我在setupUi这个方法里调用了这个方法,并传入了一个参数,是这么写的self.__Load_Render_Presets("create")
然后我定义了一个新的方法,给界面上的一个下拉菜单的信号也绑定了这个方法,也传入了一个参数,是这么写的def __Link_Ui_To_Function(self):
u"""
链接Ui和槽函数
"""
self.uiCsArRenSetPresetsProjectSel.currentIndexChanged.connect(partial(self.__Load_Render_Presets, "refresh"))
这个方法和上一个方法都是在setupUi这个方法里面调用的def setupUi(self, uiWindow):
"......"
self.__Link_Ui_To_Function()
self.__Load_Render_Presets("create")
然后在软件里运行就会报错,# TypeError: __Load_Render_Presets() takes exactly 2 arguments (3 given)
但是如果我不传参数,写作如下,又会说我只给了一个参数self.__Load_Render_Presets()
# Error: # TypeError: __Load_Render_Presets()takes exactly 2 arguments (1 given) #
我感觉是槽函数传参和初始化调用不能用同一个方法,传进去的参数貌似都被视为了独立的参数,期待有大佬解惑
|