[英]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.