將一個lambda函數連接到一個Qt小部件,lambda需要捕獲兩個局部變量並將它們傳遞給一個外部函數。我有多數民衆贊成絆倒了我一個問題,因爲它是絕對位置:本地變量的第一個lambda捕獲總是假的
pushbutton.clicked.connect(lambda ca=current_answer, a=correct_answer:
self.ap.parse_answer(ca, a))
通過(False, "desired correct_answer string")
,而切換局部變量的順序捕獲:
pushbutton.clicked.connect(lambda a=correct_answer,ca=current_answer:
self.ap.parse_answer(ca, a))
通過("desired current_answer string", False)
無論變量我首先捕獲的總是被設置爲False,而第二個變量捕獲總是被預期的。
這表明我的代碼中沒有其他代碼將False指定給current_answer
或correct_answer
,並且在調用lambda函數之前插入的print()語句確認兩個變量都設置爲所需的字符串。也許我只是沒有正確捕獲變量,但在做了一些閱讀後,我找不到任何與我的語法有關的問題。我的變量捕捉看起來與我發現的衆多示例相同。
嘗試打印字符串的'repr',有可能是你看不到的東西 –
@ Padraic Cunningham:謝謝你的建議,但是這兩個字符串的repr只是預期的字符串。 –
您是否可以以獨立的方式重現問題(理想情況是獨立於Qt的問題)? – BrenBarn