簡體   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