天!
我正在使用 PySide 开发 Python GUI。我试图实现的功能之一是能够计算系统用户的登录尝试次数。对于使用 input() 命令的非 GUI 应用程序来说,这非常简单,但是我很难理解 self.lineEdit.returnPressed.connect() 命令。
正如您在下面看到的,我有一个 While 语句,最多允许 3 次登录尝试。但是,如果我尝试使用我通常用于监视键盘输入的方法,例如:
n = 1
while n < 4:
user_barcode = input()
if user_barcode == 'James':
print("Welcome James!")
else:
print("User not recognised, please try again.")
n = n + 1
print("Sorry, you are not a recognised user of this system.")
exit
但是,现在我将 user_barcode 基于 GUI 中的 lineEdit,上述方法不起作用。如果我用 self.lineEditScanBarcode.text() 替换 input(),while 语句会自动迭代 3 次,只有 1 个输入到 lineEdit。IE。我输入一个用户名,按回车,它会自动迭代 3 次。如何在 lineEdit 开始每次迭代之前“要求”输入到 lineEdit 中?
我猜我必须使用信号/插槽意识形态,但是我的理解是我必须使用 self.lineEditScanBarcode.returnPressed.connect() 操作将 lineEdit 输入定向到单独的函数。我在下面试了一下,但它是火车残骸!
def Login(self):
global user_barcode
user_barcode = self.lineEditScanBarcode.text()
i = 1
while i < 4:
print(i)
self.lineEditScanBarcode.returnPressed.connect(LoginAttempt)
def LoginAttempt(self):
with open('Users.csv', 'rt') as f:
reader = csv.reader(f)
for row in reader:
for field in row:
if field == user_barcode:
global row_number
row_number = n
self.LoggedIn()
if user_barcode == 'Calibration':
self.lineEditScanBarcode.clear()
showCalibrationCertificate.show()
else:
if user_barcode not in open('Users.csv', 'r').read():
print("Unauthorised access request.")
i = i + 1
self.lineEditScanBarcode.clear()
self.LCDLoginAttempt.display(i-1)
next
print("Sorry, you are not an authorised user of this system. Please contact the system administrator for further clarification, or if you feel this is an error.")
我在这里缺少一些明显的技巧吗?我希望有一种方法可以使用 returnPressed 操作,使其行为类似于 input() 操作。这样,我可以在迭代开始时执行 returnPressed 操作,并且脚本在继续之前等待在 lineEdit 上按下 enter 键。
有人有想法么?
谢谢!