У меня проблемы с запуском, если часть кода, где имя пользователя и пароль неверны. Программа не показывает никаких ошибок. И как я могу установить для userfullname класса Index значение lable в admin_object = userFullname.setText ()?
import sqlite3
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtWidgets import QMessageBox
from Login_form import Login_form
from Admin_Home_form import AdminHome_Form
class Index(QtWidgets.QDialog, Login_form):
def __init__(self):
QtWidgets.QDialog.__init__(self)
self.loginFormDesign(self)
self.login_button.clicked.connect(self.login_check)
def login_check(self):
uname = self.U_name_text.text()
password = self.pass_text.text()
# self.userfullname = userfullname
connection = sqlite3.connect("taylorDB.db")
result = connection.execute("SELECT USER_EMAIL FROM USERS WHERE USER_EMAIL = ? AND USER_PASSWORD = ?",
(uname, password))
for dbemail in result: # After this code does not work if value does not match
print(dbemail[0])
if dbemail[0] != uname:
buttonReply = QMessageBox.question(self, 'Login Invalid', "Check User Name or Password!",
QMessageBox.Close)
if buttonReply == QMessageBox.Close:
print("invalid login")
else:
result = connection.execute("SELECT USER_FULLNAME FROM USERS WHERE USER_EMAIL = ?", (dbemail))
self.userfullname = result.fetchone()
print(self.userfullname)
self.accept()
class admin_operation(QtWidgets.QMainWindow, AdminHome_Form, Index):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.adminHomeFormDesign(self)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
login_object = Index()
admin_object = admin_operation()
if login_object.exec() == QtWidgets.QDialog.Accepted:
# admin_object.userFullname.setText() #I want to set the value of userfullname here?
admin_object.show()
sys.exit(app.exec_())
Мои основные не так сильны, пожалуйста, наставьте меня.
загрузите его в dropbox, drive, github и т. д. и поделитесь ссылкой, чтобы скачать
разделяют Login_form.py
и Admin_Home_form.py
Вы должны улучшить свою логику, вместо выбора возврата USER_EMAIL
должен возвращать USER_FULLNAME
, чтобы вы избегали создания нового запроса, с другой стороны, чтобы получить результаты, вы должны использовать fetchall()
, это вернет кортеж результатов, если результаты не будут быть пустым, иначе будут результаты. В вашем случае я предполагаю, что вы ограничиваете USER_EMAIL
уникальностью, так что результатом будет кортеж из одного элемента. Эти данные вы храните в одном члене класса и устанавливаете в другом окне.
С другой стороны, необязательно, чтобы admin_operation наследовал от Index, поэтому удалите его.
import sqlite3
from PyQt5.QtWidgets import QMessageBox, QDialog, QMainWindow, QApplication
from Login_form import Login_form
from Admin_Home_form import AdminHome_Form
class Index(QDialog, Login_form):
def __init__(self):
QDialog.__init__(self)
self.loginFormDesign(self)
self.login_button.clicked.connect(self.login_check)
def login_check(self):
uname = self.U_name_text.text()
password = self.pass_text.text()
connection = sqlite3.connect("taylorDB.db")
result = connection.execute("SELECT USER_FULLNAME FROM USERS WHERE USER_EMAIL = ? AND USER_PASSWORD = ?",
(uname, password)).fetchall()
if result:
self.userfullname = result[0][0]
self.accept()
else:
buttonReply = QMessageBox.question(self, 'Login Invalid', "Check User Name or Password!",
QMessageBox.Close)
if buttonReply == QMessageBox.Close:
print("invalid login")
# self.reject()
class Admin_operation(QMainWindow, AdminHome_Form):
def __init__(self):
QMainWindow.__init__(self)
self.adminHomeFormDesign(self)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
login_object = Index()
admin_object = Admin_operation()
if login_object.exec() == QDialog.Accepted:
admin_object.userFullname.setText(login_object.userfullname)
admin_object.show()
sys.exit(app.exec_())
хорошо, работает фин. но я не понял этот код self.userfullname = result [0] [0] также, что использовать if login_object.exec () == QDialog.Accepted:?
@ user3135049 Чтобы вы поняли, например, допустим, вы ищете электронные письма и их имена, тогда это будет список кортежей, в котором каждый кортеж будет содержать адрес электронной почты и имя. то есть result[i][0]
относится к почте i-го результата, а result[i][1]
будет именем i-го результата. в вашем случае он имеет только один результат (при условии уникальности электронного письма) и что он имеет только одно поле, поэтому для доступа к нему вы должны использовать [0] [0]
хорошо, спасибо, а что если login_object.exec () == QDialog.Accepted:
QDialog предлагает 2 метода, accept () и reject (), эти методы используются для закрытия окна, но в случае accept окно возвращает состояние Accepted через exec_ (), а в случае reject () возвращает Rejected, in Если вы вошли в систему правильно, используется accept (), поэтому статус - Принято.
если у меня есть два файла .py, например файл main.py выше. как мне их соединить, чтобы выполнялась последовательность событий?
поделитесь своим файлом .db