简体   繁体   中英

Access QLineEdit input from another window

I am creating a signup and login GUI in pyqt5. I have used Qt Designer to generate the ui. I am getting user information using QLineEdit in signup form. How can i access the information in login window so that a user can login.

My ui python files are:

signup:

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"))

login:

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"))

currently i am storing the values as csv and later access them. But for this i have to restart my app.

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_())

Is there a way that for the first time i can access the input values from signup to login without restarting my app? Because from second time i can access them from csv.

Yes, there is a way you can access the data obtained in the login form. You can use signals and slots .

  • QObjects have signals and slots, signals are things that are emitted in response to an event. So when an event happens to an object that particular object emits a signal.

  • We can connect a signal to a slot, a slot is something that triggers some piece of functionality in a widget.

Here is a small example.

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) is a signal. When the sign up button is clicked, it will emit a signal and connect it to the on_submit(self) method.

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()

In signupwindow() method we are opening the SignUp window and we are connecting the submit signal with the updatemessages slots.

For more information, check these videos out.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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