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

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

26.02.2018, 20:41. Показов 12510. Ответов 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\SystemOfUsersManagemen t.py", line 34, in setupUi1
self.exit_pushButton.clicked.connect(sel f.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.p y: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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2018, 20:41
Ответы с готовыми решениями:

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

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

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.02.2018, 20:41
Помогаю со студенческими работами здесь

Qt designer и PyQT5
Всем привет. Я использую PyQt5 в связке с Qt designer. После обновления у меня появились дополнительные виджеты (Views KDE, Buttons KDE .....

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru