繁体   English   中英

从另一个 window 访问 QLineEdit 输入

[英]Access QLineEdit input from another window

我正在 pyqt5 中创建一个注册和登录 GUI。 我使用了 Qt Designer 来生成 ui。 我在注册表单中使用 QLineEdit 获取用户信息。 我如何访问登录 window 中的信息,以便用户可以登录。

我的 ui python 文件是:

报名:

class Ui_SignUp(object):
    def setupUi(self, SignUp):
        SignUp.setObjectName("SignUp")
        SignUp.resize(800, 600)
        SignUp.setStyleSheet("background-color: rgb(149, 149, 149);")
        self.centralwidget = QtWidgets.QWidget(SignUp)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setText("")
        self.label_2.setPixmap(QtGui.QPixmap("user.png"))
        self.label_2.setScaledContents(True)
        self.label_2.setObjectName("label_2")
        self.verticalLayout_2.addWidget(self.label_2)
        self.verticalLayout_3.addLayout(self.verticalLayout_2)
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout_3.addItem(spacerItem)
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.verticalLayout_3.addWidget(self.label_5)
        self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.verticalLayout_3.addWidget(self.lineEdit_4)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.verticalLayout_3.addWidget(self.label_4)
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.verticalLayout.addWidget(self.lineEdit_3)
        self.label = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        font.setStrikeOut(False)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_3.setFont(font)
        self.label_3.setStyleSheet("")
        self.label_3.setObjectName("label_3")
        self.verticalLayout.addWidget(self.label_3)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.verticalLayout.addWidget(self.lineEdit_2)
        self.label_7 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        self.verticalLayout.addWidget(self.label_7)
        self.lineEdit_6 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_6.setObjectName("lineEdit_6")
        self.verticalLayout.addWidget(self.lineEdit_6)
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.verticalLayout.addWidget(self.label_6)
        self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.verticalLayout.addWidget(self.lineEdit_5)
        spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem1)
        self.verticalLayout_3.addLayout(self.verticalLayout)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.pushButton_2.setObjectName("pushButton_2")
        self.horizontalLayout.addWidget(self.pushButton_2)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        self.verticalLayout_3.addLayout(self.horizontalLayout)
        self.horizontalLayout_2.addLayout(self.verticalLayout_3)
        SignUp.setCentralWidget(self.centralwidget)

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

    def retranslateUi(self, SignUp):
        _translate = QtCore.QCoreApplication.translate
        SignUp.setWindowTitle(_translate("SignUp", "MainWindow"))
        self.label_5.setText(_translate("SignUp", "First Name:"))
        self.lineEdit_4.setPlaceholderText(_translate("SignUp", "Please enter your first name"))
        self.label_4.setText(_translate("SignUp", "Last Name:"))
        self.lineEdit_3.setPlaceholderText(_translate("SignUp", "Please enter your last name"))
        self.label.setText(_translate("SignUp", "Username:"))
        self.lineEdit.setPlaceholderText(_translate("SignUp", "Please choose your Username"))
        self.label_3.setText(_translate("SignUp", "Password (must be between 6-20 characters. must include letters and numbers)"))
        self.lineEdit_2.setPlaceholderText(_translate("SignUp", "Please choose your Password"))
        self.label_7.setText(_translate("SignUp", "Retype Password"))
        self.lineEdit_6.setPlaceholderText(_translate("SignUp", "Please retype your password"))
        self.label_6.setText(_translate("SignUp", "Email:"))
        self.lineEdit_5.setPlaceholderText(_translate("SignUp", "Please enter your email address"))
        self.pushButton_2.setText(_translate("SignUp", "Go to Login"))
        self.pushButton.setText(_translate("SignUp", "Sign Up"))

登录:

class Ui_Welcome(object):
    def setupUi(self, Welcome):
        Welcome.setObjectName("Welcome")
        Welcome.resize(800, 600)
        Welcome.setStyleSheet("background-color: rgb(149, 149, 149);")
        self.centralwidget = QtWidgets.QWidget(Welcome)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setText("")
        self.label_2.setPixmap(QtGui.QPixmap("logo.png"))
        self.label_2.setScaledContents(True)
        self.label_2.setObjectName("label_2")
        self.verticalLayout_2.addWidget(self.label_2)
        self.verticalLayout_3.addLayout(self.verticalLayout_2)
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem)
        self.label = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        font.setStrikeOut(False)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.label_3.setFont(font)
        self.label_3.setStyleSheet("")
        self.label_3.setObjectName("label_3")
        self.verticalLayout.addWidget(self.label_3)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.verticalLayout.addWidget(self.lineEdit_2)
        spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem1)
        self.verticalLayout_3.addLayout(self.verticalLayout)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.pushButton_2.setObjectName("pushButton_2")
        self.horizontalLayout.addWidget(self.pushButton_2)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        self.verticalLayout_3.addLayout(self.horizontalLayout)
        self.horizontalLayout_2.addLayout(self.verticalLayout_3)
        Welcome.setCentralWidget(self.centralwidget)

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

    def retranslateUi(self, Welcome):
        _translate = QtCore.QCoreApplication.translate
        Welcome.setWindowTitle(_translate("Welcome", "MainWindow"))
        self.label.setText(_translate("Welcome", "Username:"))
        self.lineEdit.setPlaceholderText(_translate("Welcome", "Please enter your Username"))
        self.label_3.setText(_translate("Welcome", "Password:"))
        self.lineEdit_2.setPlaceholderText(_translate("Welcome", "Please enter your Password"))
        self.pushButton_2.setText(_translate("Welcome", "Go to Sign Up"))
        self.pushButton.setText(_translate("Welcome", "Login"))

目前我将值存储为 csv 并稍后访问它们。 但为此我必须重新启动我的应用程序。

class SignUp(QtWidgets.QMainWindow, Ui_SignUp):
    def __init__(self):
        super(SignUp,self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.createUser)

    def changeWin(self):
        self.newW = QtWidgets.QMainWindow()
        self.ui = Ui_LogIn()
        self.ui.setupUi(self.newW)
        self.newW.show()
        self.hide()

    def createUser(self):
        if self.lineEdit_2.text() == self.lineEdit_6.text():
            values = [self.lineEdit.text(), self.lineEdit_2.text(),
                  self.lineEdit_6.text(), self.lineEdit_5.text()]
            df = pd.DataFrame()
            df["user_info"] = values
            df.to_csv("user_info.csv", index = False)
            self.changeWin()
        else:
            msg = QMessageBox.warning(None, "Error", "passwords do not match" )
    


class LogIn(QtWidgets.QMainWindow, Ui_Welcome):
    def __init__(self):
        super(LogIn,self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.HandleLogin)

    def HandleLogin(self):
        UName = self.lineEdit.text()
        UPass = self.lineEdit_2.text()
        if self.Validate(UName, UPass):
            self.changeWin()
        else:
            QMessageBox.warning(self, 'Error', 'Bad user or password')

    def Validate(self, UName, UPass):
        RetVal = False
        df1 = pd.read_csv("user_info.csv")
        UN = df1["user_info"][0]
        UP = df1["user_info"][1]
        if (UName == UN and UPass == UP):
            RetVal = True
 
        return RetVal
def SwitchWindow(w1, w2):
    w1.hide()
    w2.show()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    loginW = LogIn()
    signupW = SignUp()
    loginW.pushButton_2.clicked.connect(lambda: SwitchWindow(loginW, signupW))
    signupW.pushButton_2.clicked.connect(lambda: SwitchWindow(signupW, loginW))
    loginW.show()
    sys.exit(app.exec_())

有没有一种方法可以让我第一次访问从注册到登录的输入值而无需重新启动我的应用程序? 因为从第二次开始,我可以从 csv 访问它们。

是的,有一种方法可以访问登录表单中获得的数据。 您可以使用信号和插槽

  • QObjects 有信号和槽,信号是响应事件而发出的东西。 因此,当 object 发生事件时,特定的 object 会发出信号。

  • 我们可以将信号连接到插槽,插槽是触发小部件中某些功能的东西。

这是一个小例子。

class SignUp(qtw.QWidget):
    
    submitted = qtc.pyqtSignal(str,str)
    
    def __init__(self):
        super().__init__()
        
        self.setLayout(qtw.QVBoxLayout())
        
        self.user_name = qtw.QLineEdit()
        self.password = qtw.QLineEdit()
        self.submit = qtw.QPushButton("sign up")
        
        self.user_name.setText("username")
        self.password.setText("password")
        
        self.layout().addWidget(self.user_name)
        self.layout().addWidget(self.password)
        self.layout().addWidget(self.submit)
        
        self.submit.clicked.connect(self.on_submit)
        self.show()
          
        
    def on_submit(self):
        self.submitted.emit(self.user_name.text(),self.password.text())
        self.close()

submitted = qtc.pyqtSignal(str,str)是一个信号。 单击注册按钮时,它将发出一个信号并将其连接到on_submit(self)方法。

class Loginwindow(qtw.QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.setLayout(qtw.QVBoxLayout())

        self.user_name = qtw.QLineEdit()
        self.password = qtw.QLineEdit()
        self.login = qtw.QPushButton("Log in")
        self.signup = qtw.QPushButton("sign up")
        
        self.layout().addWidget(self.user_name)
        self.layout().addWidget(self.password)
        self.layout().addWidget(self.login)
        self.layout().addWidget(self.signup)
        
        self.signup.clicked.connect(self.signupwindow)
        self.show()

    @qtc.pyqtSlot(str,str)
    def updatemessages(self,username,password):
        self.user_name.setText(username)
        self.password.setText(password)
        
    def signupwindow(self):
        self.SignUp = SignUp()
        self.SignUp.submitted.connect(self.updatemessages)
        self.SignUp.show()

signupwindow()方法中,我们打开SignUp window 并将提交信号与updatemessages插槽连接起来。

有关更多信息,请查看这些视频。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM