我正在製作自己的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的函數。看我的編輯。 –