我正在制作自己的GUI,并且在此GUI中,我希望用户将其当前工作保存为配置文件。每次他们添加一个配置文件时,我想在菜单栏上添加一个操作,以便他们稍后可以再次打开该配置文件。我在连接方法和菜单栏中的操作项时遇到了问题。PyQt5将变量传递给其他方法
这是我的代码
def addFuzzyProfile(self):
self.fuzzyProfile.append([])
self.fuzzyProfile[-1] = self.fuzzyInput + self.fuzzyOutput
self.profiles.append([])
self.profiles[-1] = QAction('&Testing',self)
self.profiles[-1].triggered.connect(lambda: self.profileFuzzy(len(self.profiles)-1))
self.profileMenu.addAction(self.profiles[-1])
print(len(self.profiles)-1)
self.profiles是2D列表存储整数的数组。 创建新项目时,会创建一个新列表,并且该列表将填充用户的数据。当我将该操作连接到self.profileFuzzy方法时,会出现问题。
下面是该方法profileFuzzy:
def profileFuzzy(self, i):
try:
print('iiiiii')
print(i)
self.fuzzyInput = self.fuzzyProfile[i][0:28]
self.fuzzyOutput = self.fuzzyProfile[i][28:56]
self.motorFuzzy()
except Exception as e:
print(e)
现在,每当一个新的项被添加,在profileFuzzy方法变量i只接收在该点self.profiles的长度。例如,如果self.profiles的len当前为5,那么profileFuzzy中的'i'变量将总是接收5,即使例如第二个配置文件(其中'i'应该是2)被点击。这会导致我的软件只加载上次保存的配置文件,而不是用户的选择。
我相信我的问题在于如何将我的self.profiles与profileFuzzy方法连接起来。我哪里错了?
在此先感谢。
托马斯嗨,我有一个类似的问题不能用以前的解决方案来解决:因为我在范围 (7): self.roisin [I] .sigRegionChangeFinished.connect(拉姆达:self.manageInputChange (I)) \t \t \t self.roisout [I] .sigRegionChangeFinished.connect(拉姆达:self.manageOutputChange(I)) 将使self.manageInputChange(I)以某种方式评估,以6为他们所有。我已经试过放置一个新变量并用该值填充该变量,但它不起作用。我又在哪里出了问题? 谢谢! –
由于您创建的每个lambda都捕获了对“i”的引用,并且在循环中更改了“i”。这在你原来的问题中没有发生,因为每次你输入函数时都会创建一个新的'index',但** for'循环中只会创建一个**'i'。你可以定义一个返回你需要的lambda的函数。看我的编辑。 –