如何在PYQT5中从数据库进行身份验证后显示用户名

时间:2018-04-20 17:12:18

标签: python pyqt pyqt5 qt-designer

我有两个类文件login-form.py和welcome.py

在login-form.py中,使用sqlite3数据库执行用户身份验证。

login-form.py的代码

from PyQt5 import QtCore, QtGui, QtWidgets
from welcome import Ui_MainWindow
import sqlite3

class Ui_Dialog2(object):
    def login_check(self):
        uname = self.U_name_text.text()
        passw = self.pass_text.text()
        connection = sqlite3.connect("login.db")
        result = connection.execute("SELECT * FROM USERS WHERE USERNAME = ? AND PASSWORD = ?", (uname, passw))
    if (len(result.fetchall()) > 0):
        print("Login success")
        self.welcomewindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.welcomewindow)
        Dialog.hide()
        self.welcomewindow.show()
    else:
        print("invalid login")

def setupUi2(self, Dialog):
    Dialog.setObjectName("Dialog")
    Dialog.resize(301, 386)
    Dialog.setStyleSheet("QDialog{\n"
                         "background-color: rgb(167, 210, 255);\n"
                         "}\n"
                         "QPushButton{\n"
                         "background-color: rgb(255, 255, 255);\n"
                         "border:none;\n"
                         "}\n"
                         "QLabel{\n"
                         "color:rgb(255, 23, 54);\n"
                         "font-size:20px;\n"
                         "}")
    self.U_name_Lable = QtWidgets.QLabel(Dialog)
    self.U_name_Lable.setGeometry(QtCore.QRect(20, 110, 111, 21))
    self.U_name_Lable.setObjectName("U_name_Lable")
    self.Pass_Lable = QtWidgets.QLabel(Dialog)
    self.Pass_Lable.setGeometry(QtCore.QRect(20, 150, 111, 21))
    self.Pass_Lable.setObjectName("Pass_Lable")
    self.label = QtWidgets.QLabel(Dialog)
    self.label.setGeometry(QtCore.QRect(60, 30, 201, 31))
    font = QtGui.QFont()
    font.setPointSize(-1)
    self.label.setFont(font)
    self.label.setStyleSheet("QLabel#label{\n"
                             "font-size:30px;\n"
                             "}")
    self.label.setObjectName("label")
    self.pass_text = QtWidgets.QLineEdit(Dialog)
    self.pass_text.setGeometry(QtCore.QRect(140, 150, 131, 20))
    self.pass_text.setObjectName("pass_text")
    self.login_button = QtWidgets.QPushButton(Dialog)
    self.login_button.setGeometry(QtCore.QRect(140, 190, 61, 23))
    self.login_button.setObjectName("login_button")
    ##############button event################
    self.login_button.clicked.connect(self.login_check)
    ##########################################
    self.sighup_button = QtWidgets.QPushButton(Dialog)
    self.sighup_button.setGeometry(QtCore.QRect(210, 190, 61, 23))
    self.sighup_button.setObjectName("sighup_button")
    self.U_name_text = QtWidgets.QLineEdit(Dialog)
    self.U_name_text.setGeometry(QtCore.QRect(140, 110, 131, 20))
    self.U_name_text.setStyleSheet("")
    self.U_name_text.setObjectName("U_name_text")

    self.retranslateUi(Dialog)
    QtCore.QMetaObject.connectSlotsByName(Dialog)

def retranslateUi(self, Dialog):
    _translate = QtCore.QCoreApplication.translate
    Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
    self.U_name_Lable.setText(_translate("Dialog", "USER NAME"))
    self.Pass_Lable.setText(_translate("Dialog", "PASSWORD"))
    self.label.setText(_translate("Dialog", "LOGIN FORM"))
    self.login_button.setText(_translate("Dialog", "Login"))
    self.sighup_button.setText(_translate("Dialog", "Sign-up"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog2()
    ui.setupUi2(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

登录后,我想在welcome.py文件中的QlineEdit中显示用户名

welcome.py的代码

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(800, 600)
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
    self.label = QtWidgets.QLabel(self.centralwidget)
    self.label.setGeometry(QtCore.QRect(220, 90, 151, 61))
    font = QtGui.QFont()
    font.setFamily("Times New Roman")
    font.setPointSize(28)
    font.setBold(True)
    font.setWeight(75)
    self.label.setFont(font)
    self.label.setObjectName("label")
    self.label_2 = QtWidgets.QLabel(self.centralwidget)
    self.label_2.setGeometry(QtCore.QRect(20, 300, 551, 61))
    self.lineEdit = QtWidgets.QLineEdit(MainWindow)
    self.lineEdit.setGeometry(QtCore.QRect(130, 220, 113, 20))
    self.lineEdit.setObjectName("lineEdit")
    font = QtGui.QFont()
    font.setFamily("Times New Roman")
    font.setPointSize(28)
    font.setBold(True)
    font.setWeight(75)
    self.label_2.setFont(font)
    self.label_2.setObjectName("label_2")
    MainWindow.setCentralWidget(self.centralwidget)
    self.statusbar = QtWidgets.QStatusBar(MainWindow)
    self.statusbar.setObjectName("statusbar")
    MainWindow.setStatusBar(self.statusbar)

    self.retranslateUi(MainWindow)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    self.label.setText(_translate("MainWindow", "Welcome"))
    self.label_2.setText(_translate("MainWindow", "Good Morning "))


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

我是python GUI的新手我不知道如何从一个表单获取值到另一个表单。

1 个答案:

答案 0 :(得分:0)

您实施解决方案的方式不具备可扩展性,它会给您带来很多麻烦。 Qt Designer建议不要修改它生成的类或文件,因为例如你想要改变窗口的颜色,添加一些小部件,你将不得不重写所有逻辑,浪费时间和金钱。

Qt Designer生成的类不是小部件,而是用于填充小部件的类。

你应该做的是创建另一个文件来处理逻辑并使用Qt Designer生成的类。

在这种情况下,您必须消除对使用Qt Designer生成的.py文件的更改。

建议:使用适当的文件名,不要使用-,因为这些文件可以被其他文件导入,如果你不遵守python语法规则你会有问题。因此,请将login-form.py的名称更改为login_form.py

您必须创建一个将调用main.py并在其中处理逻辑的新文件,因为它是QDialog,登录将使用exec_()而不是show(),并验证它是否被调用返回的结果为accept()

import sqlite3

from PyQt5 import QtCore, QtGui, QtWidgets

from login_form import Ui_Dialog2
from welcome import Ui_MainWindow

class LoginDialog(QtWidgets.QDialog, Ui_Dialog2):
    def __init__(self, *args, **kwargs):
        QtWidgets.QDialog.__init__(self, *args, **kwargs)
        self.setupUi(self)
        self.login_button.clicked.connect(self.login_check)

    def login_check(self):
        uname = self.U_name_text.text()
        passw = self.pass_text.text()
        connection = sqlite3.connect("login.db")
        result = connection.execute("SELECT * FROM USERS WHERE USERNAME = ? AND PASSWORD = ?", (uname, passw))
        if result.fetchall():
            self.accept()
        else:
            print("invalid login")

class WelcomeWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        QtWidgets.QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    login = LoginDialog()
    w = WelcomeWindow()
    if login.exec_() == QtWidgets.QDialog.Accepted:
        username = login.U_name_text.text()
        w.lineEdit.setText(username)
        w.show()
    sys.exit(app.exec_())

完整示例可在以下link中找到。