PyQt5 PyQt5 |Qt Designer | Переход из окна к окну через кнопку
26.02.2018, 20:41. Показов 12069. Ответов 0
Добрый вечер! Сразу предупреждаю новичок в PyQt5. Пытаюсь создать примитивную авторизационную форму (вход пользователя в систему через ввод логина и пароля) на Qt Designer (PyQt5 и Python 3.6.3). Возникла проблема с возвратом к первому окна из второго окна приложения. Первое окно представляет собой окно авторизации пользователя, где вводятся данные пользователя: логин и пароль. Второе окно называется системой менеджмента пользователей - в этом окне предоставлена информация пользователей в таблице (логины и пароли пользователей). Два окна созданы в разных модулях. Есть также третий модуль, который связывает два предыдущих между собой (пытаюсь абстрагировать модули) При запуске программы ввожу данные пользователя в поля первого окна и нажимаю кнопку “войти”. Открывается второе окно. На втором окне есть кнопка "Выйти" для возврата к первому окну (осуществляется через метод def Back). Однако при нажатии кнопки "Выйти" программа завершает свою работу и выдает ошибку в консоли следующего содержания:
Traceback (most recent call last):
File "C:/login/main.py", line 28, in LoginCheck
self.Admin()
File "C:/login/main.py", line 43, in Admin
NewWin.ManagWindowShow().exec_()
File "C:/login/main.py", line 51, in ManagWindowShow
self.ui.setupUi1(self.AdminWindow)
File "C:\login\Modules\SystemOfUsersManagement.py", line 34, in setupUi1
self.exit_pushButton.clicked.connect(self.Back)
AttributeError: 'Ui_Admin' object has no attribute 'Back'
An exception has occurred, use %tb to see the full traceback.
SystemExit: 0
C:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py:2870: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
Как ее можно решить?
Прикладываю строки программы.
Первый модуль login.py (“Окно авторизации пользователя”):
Python | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
| # -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'login.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Authorization(object):
def setupUi(self, Authorization):
Authorization.setObjectName("Authorization")
Authorization.resize(441, 232)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("soul.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Authorization.setWindowIcon(icon)
self.centralwidget = QtWidgets.QWidget(Authorization)
self.centralwidget.setObjectName("centralwidget")
self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget.setGeometry(QtCore.QRect(70, 40, 331, 101))
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setVerticalSpacing(15)
self.gridLayout.setObjectName("gridLayout")
self.password_label = QtWidgets.QLabel(self.layoutWidget)
self.password_label.setObjectName("password_label")
self.gridLayout.addWidget(self.password_label, 1, 0, 1, 1)
self.password_lineEdit = QtWidgets.QLineEdit(self.layoutWidget)
self.password_lineEdit.setObjectName("password_lineEdit")
self.gridLayout.addWidget(self.password_lineEdit, 1, 1, 1, 1)
self.login_label = QtWidgets.QLabel(self.layoutWidget)
self.login_label.setObjectName("login_label")
self.gridLayout.addWidget(self.login_label, 0, 0, 1, 1)
self.login_lineEdit = QtWidgets.QLineEdit(self.layoutWidget)
self.login_lineEdit.setObjectName("login_lineEdit")
self.gridLayout.addWidget(self.login_lineEdit, 0, 1, 1, 1)
self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget1.setGeometry(QtCore.QRect(130, 160, 232, 25))
self.layoutWidget1.setObjectName("layoutWidget1")
self.formLayout = QtWidgets.QFormLayout(self.layoutWidget1)
self.formLayout.setContentsMargins(0, 0, 0, 0)
self.formLayout.setHorizontalSpacing(55)
self.formLayout.setObjectName("formLayout")
self.login_pushButton = QtWidgets.QPushButton(self.layoutWidget1)
self.login_pushButton.setObjectName("login_pushButton")
self.login_pushButton.clicked.connect(self.LoginCheck)
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.login_pushButton)
self.logout_pushButton = QtWidgets.QPushButton(self.layoutWidget1)
self.logout_pushButton.setObjectName("logout_pushButton")
self.logout_pushButton.clicked.connect(Authorization.close)
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.logout_pushButton)
Authorization.setCentralWidget(self.centralwidget)
self.password_label.setBuddy(self.password_lineEdit)
self.login_label.setBuddy(self.login_lineEdit)
self.retranslateUi(Authorization)
QtCore.QMetaObject.connectSlotsByName(Authorization)
Authorization.setTabOrder(self.login_lineEdit, self.password_lineEdit)
Authorization.setTabOrder(self.password_lineEdit, self.login_pushButton)
Authorization.setTabOrder(self.login_pushButton, self.logout_pushButton)
def retranslateUi(self, Authorization):
_translate = QtCore.QCoreApplication.translate
Authorization.setWindowTitle(_translate("Authorization", "StatEdu - Авторизация пользователя"))
self.password_label.setText(_translate("Authorization", "Пароль"))
self.login_label.setText(_translate("Authorization", "Логин"))
self.login_pushButton.setText(_translate("Authorization", "Войти"))
self.logout_pushButton.setText(_translate("Authorization", "Выход из системы"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Authorization = QtWidgets.QMainWindow()
ui = Ui_Authorization()
ui.setupUi(Authorization)
Authorization.show()
sys.exit(app.exec_()) |
|
Второй модуль SystemOfUsersManagement (“Окно системы менеджмента пользователей”):
Python | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| # -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'SystemOfUsersManagement.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Admin(object):
def setupUi1(self, Admin):
Admin.setObjectName("Admin")
Admin.resize(445, 294)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("soul.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Admin.setWindowIcon(icon)
self.centralwidget = QtWidgets.QWidget(Admin)
self.centralwidget.setObjectName("centralwidget")
self.Users_tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.Users_tableWidget.setGeometry(QtCore.QRect(20, 20, 391, 192))
self.Users_tableWidget.setRowCount(0)
self.Users_tableWidget.setColumnCount(2)
self.Users_tableWidget.setObjectName("Users_tableWidget")
self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget.setGeometry(QtCore.QRect(20, 240, 389, 25))
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setHorizontalSpacing(25)
self.gridLayout.setObjectName("gridLayout")
self.exit_pushButton = QtWidgets.QPushButton(self.layoutWidget)
self.exit_pushButton.setObjectName("exit_pushButton")
self.exit_pushButton.clicked.connect(self.Back)
self.gridLayout.addWidget(self.exit_pushButton, 0, 3, 1, 1)
self.create_pushButton = QtWidgets.QPushButton(self.layoutWidget)
self.create_pushButton.setObjectName("create_pushButton")
self.gridLayout.addWidget(self.create_pushButton, 0, 0, 1, 1)
self.delete_pushButton = QtWidgets.QPushButton(self.layoutWidget)
self.delete_pushButton.setObjectName("delete_pushButton")
self.gridLayout.addWidget(self.delete_pushButton, 0, 1, 1, 1)
self.edit_pushButton = QtWidgets.QPushButton(self.layoutWidget)
self.edit_pushButton.setObjectName("edit_pushButton")
self.gridLayout.addWidget(self.edit_pushButton, 0, 2, 1, 1)
self.layoutWidget.raise_()
self.Users_tableWidget.raise_()
Admin.setCentralWidget(self.centralwidget)
self.retranslateUi(Admin)
QtCore.QMetaObject.connectSlotsByName(Admin)
Admin.setTabOrder(self.Users_tableWidget, self.create_pushButton)
Admin.setTabOrder(self.create_pushButton, self.delete_pushButton)
Admin.setTabOrder(self.delete_pushButton, self.edit_pushButton)
Admin.setTabOrder(self.edit_pushButton, self.exit_pushButton)
def retranslateUi(self, Admin):
_translate = QtCore.QCoreApplication.translate
Admin.setWindowTitle(_translate("Admin", "StatEdu - Система менеджмента пользователей"))
self.exit_pushButton.setText(_translate("Admin", "Выход"))
self.create_pushButton.setText(_translate("Admin", "Создать"))
self.delete_pushButton.setText(_translate("Admin", "Удалить"))
self.edit_pushButton.setText(_translate("Admin", "Редактировать"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Admin = QtWidgets.QMainWindow()
ui = Ui_Admin()
ui.setupUi(Admin)
Admin.show()
sys.exit(app.exec_()) |
|
Третий модуль, связующий предыдущие два - main.py:
Python | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| # -*- coding: utf-8 -*-
"""
Created on Wed Feb 7 13:33:52 2018
@author: USER
"""
from Modules.login import Ui_Authorization
from Modules.SystemOfUsersManagement import Ui_Admin
import sqlite3
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_login(Ui_Authorization):
def login(self): # Показывает форму авторизации
self.AuthorizationWindow = QtWidgets.QMainWindow()
self.ui = Ui_Authorization()
self.ui.setupUi(self.AuthorizationWindow)
self.AuthorizationWindow.show()
def LoginCheck(self): # Процесс авторизации пользователя
username = self.login_lineEdit.text()
password = self.password_lineEdit.text()
connection = sqlite3.connect("login.db")
result = connection.execute("SELECT * FROM USERS WHERE Логин = ? AND Пароль = ?", (username, password))
if (len(result.fetchall()) > 0):
self.Admin()
else:
self.showMessageBox('Ошибка авторизации пользователя', 'Введенные вами данные неверны. Введите правильный пароль и логин или обратитесь к администратору.')
def showMessageBox(self, title, message): # Выводит сообщение о неверной авторизации
msgBox = QtWidgets.QMessageBox()
msgBox.setIcon(QtWidgets.QMessageBox.Warning)
msgBox.setWindowTitle(title)
msgBox.setText(message)
msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
msgBox.exec_()
def Admin(self): # Открывает Окно Системы Менеджмента Пользователей для Администратора
login.close()
NewWin = Management()
NewWin.ManagWindowShow().exec_()
NewWin.Back().exec_()
class Management(Ui_Admin):
def ManagWindowShow(self): # Показывает Окно Системы Менеджмента Пользователей для Администратора
self.AdminWindow = QtWidgets.QMainWindow()
self.ui = Ui_Admin()
self.ui.setupUi(self.AdminWindow)
self.AdminWindow.show()
def Back(self): # Возвращает к окну авторизации пользователя
self.AdminWindow.close()
OldWin = Ui_login()
OldWin.login().exec_()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
login = QtWidgets.QMainWindow()
ui = Ui_login()
ui.setupUi(login)
login.show()
sys.exit(app.exec_()) |
|
P.S. Есть еще примитивная база пользователей написанная посредством импортированной библиотеки sqlite3, но полагаю ее нет смысла выкладывать для решения возникшей проблемы. Надеюсь на ваше понимание и помощь
0
|