Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 26.02.2018
Сообщений: 2
1
PyQt5

PyQt5 |Qt Designer | Переход из окна к окну через кнопку

26.02.2018, 20:41. Показов 12069. Ответов 0

Author24 — интернет-сервис помощи студентам
Добрый вечер! Сразу предупреждаю новичок в 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2018, 20:41
Ответы с готовыми решениями:

Как реализовать переход от окна к окну через кнопку PyQt5
Интерефейс делал в дизайнере, суть в том, что есть два интерфейса и нужно сделать так, чтобы при...

gtkmm, как реализовать переход от окна к окну?
Подскажите пожалуйста, те кто работал с gtkmm - как вы реализовывали переход от одного к окна к...

Как послать окну сообщение через PostMessage если нет дочернего окна
Отправляю сообщения о нажатия клавиши через PostMessage(). Для отправки эта функция требует...

Qt designer и PyQT5
Всем привет. Я использую PyQt5 в связке с Qt designer. После обновления у меня появились...

PYQT5 designer Python 3.5
Доброго времени суток! Нуждаюсь в подсказке через PYQT5 designer создал окно с виджетами,...

0
26.02.2018, 20:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2018, 20:41
Помогаю со студенческими работами здесь

PyQt5 + Qt Designer. Как подключить событие к элементу?
Хочу выучить PyQt5. Еле как установил. Но теперь столкнулся с проблемой, нету уроков, или хотя бы...

PyQt5: в Qt Designer Диалог открытия и сохранения файлов?
Добрый день! Есть ли в PyQt5 в Qt Designer Диалог открытия и сохранения файлов? Или нужно отдельно...

Drag and Drop для форм Pyqt5, созданных в QT Designer
Здравствуйте! Пишу приложение в Pyqt5, все формы создавал в Qt Designer с последующей конвертацией...

Реализовать переход на другую форму через кнопку
Пишу небольшую программу и нужно реализовать переход на другую форму через кнопку, но сколько раз...

PyQt5 При запуске окна из другого окна, методы класса не работают
Не знаю, как грамотно объяснить свою проблему, но предполагаю, что она точно в открытии нового окна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru