Как передавать Логин из база данных в другие окна PyQt5?
У меня есть приложение PyQt5, в котором есть форма регистрации, после входа/регистрации логин и пароль заносятся в БД, значение логина должно передаваться на другие страницы (например, чтобы к каждого пользователя были свои настройки)
MainWindow:
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import * import threading import pyautogui from Form import * import database as db from database import * from settings_autoswap import * from PyQt5.QtCore import pyqtSignal class Ui_MainWindow(object): db_start() def setupUi(self, MainWindow): #написание страницы def add_functions(self): self.pushButton_2.clicked.connect(self.start_autoswap) self.pushButton_3.clicked.connect(self.stop_autoswap) self.pushButton_5.clicked.connect(self.reg) self.pushButton_4.clicked.connect(self.settings_autoswap) def reg(self): self.reg = QtWidgets.QMainWindow() self.ui = Ui_Form() self.ui.setupUi(self.reg) self.reg.show() def settings_autoswap(self): self.settings_autoswap = QtWidgets.QMainWindow() self.ui = Ui_Settings_autoswap() self.ui.setupUi(self.settings_autoswap) self.settings_autoswap.show() ) |
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import * import threading import pyautogui from Form import * import database as db from database import * from settings_autoswap import * from PyQt5.QtCore import pyqtSignal class Ui_MainWindow(object): db_start() def setupUi(self, MainWindow): #написание страницы def add_functions(self): self.pushButton_2.clicked.connect(self.start_autoswap) self.pushButton_3.clicked.connect(self.stop_autoswap) self.pushButton_5.clicked.connect(self.reg) self.pushButton_4.clicked.connect(self.settings_autoswap) def reg(self): self.reg = QtWidgets.QMainWindow() self.ui = Ui_Form() self.ui.setupUi(self.reg) self.reg.show() def settings_autoswap(self): self.settings_autoswap = QtWidgets.QMainWindow() self.ui = Ui_Settings_autoswap() self.ui.setupUi(self.settings_autoswap) self.settings_autoswap.show() )
Форма входа/регистрации (из этого файла (Form.py) должно передаваться значение Логина на другие страницы:
from PyQt5 import QtCore, QtGui, QtWidgets import database as db from database import * from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel, QSqlQueryModel from PyQt5.QtWidgets import QMessageBox from autoswap import * from PyQt5.QtCore import pyqtSignal class Ui_Form(object): value_changed = pyqtSignal(str) def setupUi(self, Form): Form.setObjectName("Form") Form.resize(593, 422) Form.setStyleSheet("background-color: rgb(0, 0, 0);") self.groupBox = QtWidgets.QGroupBox(Form) self.groupBox.setGeometry(QtCore.QRect(130, 40, 321, 321)) self.groupBox.setStyleSheet("background-color: rgb(42, 43, 56);") self.groupBox.setTitle("") self.groupBox.setAlignment(QtCore.Qt.AlignCenter) self.groupBox.setCheckable(False) self.groupBox.setObjectName("groupBox") self.label = QtWidgets.QLabel(self.groupBox) self.label.setGeometry(QtCore.QRect(80, 10, 151, 61)) self.label.setStyleSheet("font: 22pt "MS Shell Dlg 2";n" "border-color: rgb(31, 32, 41);n" "color: rgb(255, 255, 255);") self.label.setScaledContents(False) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName("label") self.lineEdit = QtWidgets.QLineEdit(self.groupBox) self.lineEdit.setGeometry(QtCore.QRect(70, 120, 191, 31)) self.lineEdit.setStyleSheet("background-color: rgb(31, 32, 41);n" "border-color: rgb(31, 32, 41);n" "color: rgb(211, 211, 211);") self.lineEdit.setText("") self.lineEdit.setAlignment(QtCore.Qt.AlignCenter) self.lineEdit.setObjectName("lineEdit") self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox) self.lineEdit_2.setGeometry(QtCore.QRect(70, 170, 191, 31)) self.lineEdit_2.setStyleSheet("background-color: rgb(31, 32, 41);n" "n" "color: rgb(211, 211, 211);") self.lineEdit_2.setText("") self.lineEdit_2.setAlignment(QtCore.Qt.AlignCenter) self.lineEdit_2.setObjectName("lineEdit_2") self.pushButton = QtWidgets.QPushButton(self.groupBox) self.pushButton.setGeometry(QtCore.QRect(60, 240, 91, 41)) self.pushButton.setStyleSheet("background-color: rgb(255, 235, 167);n" "font: 14pt "MS Shell Dlg 2";n" "box-shadow: 0 8px 24px 0 rgb(255 235 167 / 20%);n" "color: rgb(94, 102, 129);") self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.groupBox) self.pushButton_2.setGeometry(QtCore.QRect(180, 240, 91, 41)) self.pushButton_2.setStyleSheet("background-color: rgb(255, 235, 167);n" "font: 14pt "MS Shell Dlg 2";n" "box-shadow: 0 8px 24px 0 rgb(255 235 167 / 20%);n" "color: rgb(94, 102, 129);") self.pushButton_2.setObjectName("pushButton_2") self.label_2 = QtWidgets.QLabel(self.groupBox) self.label_2.setGeometry(QtCore.QRect(20, 120, 47, 21)) self.label_2.setStyleSheet("font: 14pt "MS Shell Dlg 2";n" "box-shadow: 0 8px 24px 0 rgb(255 235 167 / 20%);n" "color: rgb(94, 102, 129);") self.label_2.setAlignment(QtCore.Qt.AlignCenter) self.label_2.setObjectName("label_2") self.label_3 = QtWidgets.QLabel(self.groupBox) self.label_3.setGeometry(QtCore.QRect(10, 170, 61, 21)) self.label_3.setStyleSheet("font: 10pt "MS Shell Dlg 2";n" "box-shadow: 0 8px 24px 0 rgb(255 235 167 / 20%);n" "color: rgb(94, 102, 129);") self.label_3.setAlignment(QtCore.Qt.AlignCenter) self.label_3.setObjectName("label_3") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.label.setText(_translate("Form", "Log IN!")) self.pushButton.setText(_translate("Form", "Sign Up")) self.pushButton_2.setText(_translate("Form", "Sign In")) self.label_2.setText(_translate("Form", "Login")) self.label_3.setText(_translate("Form", "Password")) self.pushButton_2.clicked.connect(self.reg) self.pushButton.clicked.connect(self.login) def reg(self): login = self.lineEdit.text() self.login = login password = self.lineEdit_2.text() cur.execute('INSERT INTO users (login, password) VALUES (?, ?)', (login, password)) db.commit() msq = QMessageBox() msq.setWindowTitle("Регистрация") msq.setText("Вы успешно зарегистрировались!") x = msq.exec_() cur.execute('INSERT INTO settings_autoswap (login, coord_X, coord_y, button) VALUES (?, ?, ?, ?)', (login, 1000, 1000, 2)) db.commit() self.home = QtWidgets.QMainWindow() self.ui = Ui_MainWindow() self.ui.setupUi(self.home) self.home.show() def login(self): login = self.lineEdit.text() password = cur.execute('SELECT password FROM users WHERE login = ?', (login,)).fetchone() if password is not None: password_input = self.lineEdit_2.text() for row in password: pas = row if pas == password_input: msq = QMessageBox() msq.setWindowTitle("Вход") msq.setText("Вы успешно Вошли!") x = msq.exec_() elif pas != password_input: msq = QMessageBox() msq.setWindowTitle("Вход") msq.setText("Неверный пароль, повторите попытку!") x = msq.exec_() elif password is None: msq = QMessageBox() msq.setWindowTitle("Вход") msq.setText("Неверный Логин, повторите попытку!") x = msq.exec_() |
from PyQt5 import QtCore, QtGui, QtWidgets import database as db from database import * from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel, QSqlQueryModel from PyQt5.QtWidgets import QMessageBox from autoswap import * from PyQt5.QtCore import pyqtSignal class Ui_Form(object): value_changed = pyqtSignal(str) def setupUi(self, Form): Form.setObjectName("Form") Form.resize(593, 422) Form.setStyleSheet("background-color: rgb(0, 0, 0);") self.groupBox = QtWidgets.QGroupBox(Form) self.groupBox.setGeometry(QtCore.QRect(130, 40, 321, 321)) self.groupBox.setStyleSheet("background-color: rgb(42, 43, 56);") self.groupBox.setTitle("") self.groupBox.setAlignment(QtCore.Qt.AlignCenter) self.groupBox.setCheckable(False) self.groupBox.setObjectName("groupBox") self.label = QtWidgets.QLabel(self.groupBox) self.label.setGeometry(QtCore.QRect(80, 10, 151, 61)) self.label.setStyleSheet("font: 22pt "MS Shell Dlg 2";n" "border-color: rgb(31, 32, 41);n" "color: rgb(255, 255, 255);") self.label.setScaledContents(False) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName("label") self.lineEdit = QtWidgets.QLineEdit(self.groupBox) self.lineEdit.setGeometry(QtCore.QRect(70, 120, 191, 31)) self.lineEdit.setStyleSheet("background-color: rgb(31, 32, 41);n" "border-color: rgb(31, 32, 41);n" "color: rgb(211, 211, 211);") self.lineEdit.setText("") self.lineEdit.setAlignment(QtCore.Qt.AlignCenter) self.lineEdit.setObjectName("lineEdit") self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox) self.lineEdit_2.setGeometry(QtCore.QRect(70, 170, 191, 31)) self.lineEdit_2.setStyleSheet("background-color: rgb(31, 32, 41);n" "n" "color: rgb(211, 211, 211);") self.lineEdit_2.setText("") self.lineEdit_2.setAlignment(QtCore.Qt.AlignCenter) self.lineEdit_2.setObjectName("lineEdit_2") self.pushButton = QtWidgets.QPushButton(self.groupBox) self.pushButton.setGeometry(QtCore.QRect(60, 240, 91, 41)) self.pushButton.setStyleSheet("background-color: rgb(255, 235, 167);n" "font: 14pt "MS Shell Dlg 2";n" "box-shadow: 0 8px 24px 0 rgb(255 235 167 / 20%);n" "color: rgb(94, 102, 129);") self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.groupBox) self.pushButton_2.setGeometry(QtCore.QRect(180, 240, 91, 41)) self.pushButton_2.setStyleSheet("background-color: rgb(255, 235, 167);n" "font: 14pt "MS Shell Dlg 2";n" "box-shadow: 0 8px 24px 0 rgb(255 235 167 / 20%);n" "color: rgb(94, 102, 129);") self.pushButton_2.setObjectName("pushButton_2") self.label_2 = QtWidgets.QLabel(self.groupBox) self.label_2.setGeometry(QtCore.QRect(20, 120, 47, 21)) self.label_2.setStyleSheet("font: 14pt "MS Shell Dlg 2";n" "box-shadow: 0 8px 24px 0 rgb(255 235 167 / 20%);n" "color: rgb(94, 102, 129);") self.label_2.setAlignment(QtCore.Qt.AlignCenter) self.label_2.setObjectName("label_2") self.label_3 = QtWidgets.QLabel(self.groupBox) self.label_3.setGeometry(QtCore.QRect(10, 170, 61, 21)) self.label_3.setStyleSheet("font: 10pt "MS Shell Dlg 2";n" "box-shadow: 0 8px 24px 0 rgb(255 235 167 / 20%);n" "color: rgb(94, 102, 129);") self.label_3.setAlignment(QtCore.Qt.AlignCenter) self.label_3.setObjectName("label_3") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.label.setText(_translate("Form", "Log IN!")) self.pushButton.setText(_translate("Form", "Sign Up")) self.pushButton_2.setText(_translate("Form", "Sign In")) self.label_2.setText(_translate("Form", "Login")) self.label_3.setText(_translate("Form", "Password")) self.pushButton_2.clicked.connect(self.reg) self.pushButton.clicked.connect(self.login) def reg(self): login = self.lineEdit.text() self.login = login password = self.lineEdit_2.text() cur.execute('INSERT INTO users (login, password) VALUES (?, ?)', (login, password)) db.commit() msq = QMessageBox() msq.setWindowTitle("Регистрация") msq.setText("Вы успешно зарегистрировались!") x = msq.exec_() cur.execute('INSERT INTO settings_autoswap (login, coord_X, coord_y, button) VALUES (?, ?, ?, ?)', (login, 1000, 1000, 2)) db.commit() self.home = QtWidgets.QMainWindow() self.ui = Ui_MainWindow() self.ui.setupUi(self.home) self.home.show() def login(self): login = self.lineEdit.text() password = cur.execute('SELECT password FROM users WHERE login = ?', (login,)).fetchone() if password is not None: password_input = self.lineEdit_2.text() for row in password: pas = row if pas == password_input: msq = QMessageBox() msq.setWindowTitle("Вход") msq.setText("Вы успешно Вошли!") x = msq.exec_() elif pas != password_input: msq = QMessageBox() msq.setWindowTitle("Вход") msq.setText("Неверный пароль, повторите попытку!") x = msq.exec_() elif password is None: msq = QMessageBox() msq.setWindowTitle("Вход") msq.setText("Неверный Логин, повторите попытку!") x = msq.exec_()
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для передачи логина из базы данных в другие окна в PyQt5, вам следует использовать механизм сигналов и слотов.
Прежде всего, вам необходимо получить логин из базы данных. Для этого вы можете использовать библиотеку работы с базой данных, такую как SQLite или MySQL. Пример получения логина из SQLite базы данных в PyQt5:
```php
import sqlite3
# Устанавливаем соединение с базой данных
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# Выполняем запрос к базе данных
cursor.execute('SELECT login FROM users WHERE id = ?', (user_id,))
login = cursor.fetchone()[0]
# Закрываем соединение с базой данных
conn.close()
```
Далее, вам необходимо создать сигнал в основном окне, который будет передавать логин другому окну. Пример создания сигнала в PyQt5:
```php
from PyQt5.QtCore import pyqtSignal, QObject
class Communicate(QObject):
login_signal = pyqtSignal(str)
```
Теперь, в основном окне, вы можете отправить сигнал с логином в другое окно. Пример отправки сигнала с логином в PyQt5:
```php
self.communicate = Communicate()
self.communicate.login_signal.emit(login)
```
Наконец, в другом окне вы можете принять сигнал с логином и использовать его по своему усмотрению. Пример приема сигнала с логином в другом окне в PyQt5:
```php
class SecondWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.communicate = Communicate()
self.communicate.login_signal.connect(self.receive_login)
def receive_login(self, login):
print("Received login:", login)
```
Таким образом, вы можете передавать логин из базы данных в другие окна в PyQt5, используя сигналы и слоты. Не забудьте подключить необходимые модули и библиотеки для работы с базой данных и PyQt5.