PyQt5中从SQLite3数据库完成用户认证后如何显示用户名
我来帮你搞定这个需求!要实现认证通过后在welcome窗口显示用户名,咱们分几步来操作:
步骤1:完善login-form.py中的认证逻辑并传递用户名
首先你需要补全login_check方法的判断逻辑,当查询到匹配的用户时,实例化welcome窗口并把用户名传递过去。修改后的代码如下:
def login_check(self): uname = self.U_name_text.text() passw = self.pass_text.text() connection = sqlite3.connect("login.db") cursor = connection.cursor() # 执行查询并获取匹配的用户记录 cursor.execute("SELECT * FROM USERS WHERE USERNAME = ? AND PASSWORD = ?", (uname, passw)) user = cursor.fetchone() connection.close() # 操作完数据库记得关闭连接,避免资源泄漏 if user: # 认证成功,初始化welcome窗口 self.welcome_window = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(self.welcome_window) # 把用户名传递给welcome窗口 ui.set_display_username(uname) # 显示welcome窗口并关闭当前登录窗口 self.welcome_window.show() self.dialog.close() else: # 认证失败,给用户弹出提示 QtWidgets.QMessageBox.warning(self.dialog, "登录失败", "用户名或密码不正确!")
注意:需要在Ui_Dialog2的setupUi方法里保存当前登录窗口的实例,方便后续关闭:
def setupUi(self, Dialog): self.dialog = Dialog # 保存窗口实例 # 原有setupUi的其他代码...
步骤2:修改welcome.py添加用户名显示功能
接下来要在welcome窗口的UI类里添加接收并显示用户名的逻辑。首先确保你的welcome窗口有一个用于显示用户名的控件(比如QLabel),如果还没有,可以在Qt Designer里添加一个QLabel,设置好对象名(比如welcome_label)。
修改welcome.py的代码:
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): # 原有setupUi代码... # 如果是手动创建控件,参考下面的代码(如果是Qt Designer生成的可以忽略这部分) self.welcome_label = QtWidgets.QLabel(MainWindow) self.welcome_label.setGeometry(QtCore.QRect(150, 60, 300, 30)) self.welcome_label.setFont(QtGui.QFont("Arial", 12)) # 其他原有代码... def set_display_username(self, username): # 更新标签文本,展示用户名 self.welcome_label.setText(f"欢迎回来,{username}!")
额外提示
- 记得把
login_check方法绑定到登录按钮的clicked信号上,比如在setupUi里添加:self.login_button.clicked.connect(self.login_check)(替换成你实际的按钮对象名) - 数据库操作时尽量用cursor执行查询,避免直接用connection.execute,代码更规范
这样操作后,用户输入正确的账号密码登录成功,就会自动跳转到welcome窗口并显示对应的用户名啦!
内容的提问来源于stack exchange,提问作者ndj
相关产品推荐
相关产品推荐

