QLineEdit复用后无法获取输入值 二次确认PIN密码时返回空值问题
问题核心原因
- 你对
ok_btn的clicked信号做了多次累加绑定,Qt的connect操作默认不会覆盖之前绑定的槽函数,只会新增。每次点击确认按钮时,会按绑定顺序触发所有历史槽函数,导致输入框被提前清空,后续读取值自然为空 - 重试逻辑触发
confirmPinPass时没有清理旧的信号绑定,绑定的槽函数会越来越多,后续会出现用户还没完成输入,输入框就被前序槽函数清空的问题,所以多次重试后两个密码值都为空
修复方案
每次给ok_btn绑定新的槽函数前,先断开所有之前的clicked信号绑定,避免槽函数重复触发,修正后的代码如下:
def confirmPinPass(self): print("confirmPinPass") self.askpin_lbl.setText("Enter your Pin/Password:") self.pinpass_le.clear() # 断开之前所有的clicked信号绑定,避免重复触发 try: self.ok_btn.clicked.disconnect() except TypeError: # 没有已绑定的信号时disconnect会抛TypeError,直接忽略即可 pass self.ok_btn.clicked.connect(self.reconfirmPinPass) def reconfirmPinPass(self): print("reconfirmPinPass") pinpassword = self.pinpass_le.text() print("pinpass",pinpassword) self.askpin_lbl.setText("Confirm your Pin/Pass") self.pinpass_le.clear() # 断开旧绑定 try: self.ok_btn.clicked.disconnect() except TypeError: pass self.ok_btn.clicked.connect(lambda: self.checkPassFromConfirm(pinpassword)) def checkPassFromConfirm(self, password): print("checkPassFromConfirm") self.pinpassword2 = self.pinpass_le.text() print("pinpass2", self.pinpassword2) print("pinpass2: ", self.pinpassword2,"pinpass: ", password) if self.pinpassword2 != password: # 重新发起密码确认流程 self.confirmPinPass() else: self.gotomenu()
内容的提问来源于stack exchange,提问作者Angelo Dionisio
相关产品推荐
相关产品推荐

