Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/55: Рейтинг темы: голосов - 55, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 05.05.2020
Сообщений: 227
PyQt5

Object has no attribute 'exec_'

31.10.2020, 02:04. Показов 11991. Ответов 21

Студворк — интернет-сервис помощи студентам
Возникает ошибка (единственная на данный момент):

Traceback (most recent call last):
File "E:/py/CourseWork/CourseProject.pyw", line 98, in signUp
signUp_window.exec_()
AttributeError: 'SignUp' object has no attribute 'exec_'


При этом использую exec_() и в других местах, например window.exec_(), но всё с этим нормально. Классы этих двух объектов по сути наследуют одно и то же.

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
from PyQt5 import QtWidgets
import sys
import pickle
 
 
class SignUp(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.Sgroup_box = QtWidgets.QGroupBox("Form")
        self.Sgroup_box.setStyleSheet("font-weight: bold")
        self.Slabel1 = QtWidgets.QLabel("Login")
        self.Slabel2 = QtWidgets.QLabel("Password")
        self.Slabel3 = QtWidgets.QLabel("Password(2)")
        self.Sline_edit1 = QtWidgets.QLineEdit()
        self.Sline_edit2 = QtWidgets.QLineEdit()
        self.Sline_edit3 = QtWidgets.QLineEdit()
        self.Sbtn = QtWidgets.QPushButton("Send")
        self.Sllbox1 = QtWidgets.QVBoxLayout()
        self.Sllbox1.addWidget(self.Slabel1)
        self.Sllbox1.addWidget(self.Slabel2)
        self.Sllbox1.addWidget(self.Slabel3)
        self.Sllbox2 = QtWidgets.QVBoxLayout()
        self.Sllbox2.addWidget(self.Sline_edit1)
        self.Sllbox2.addWidget(self.Sline_edit2)
        self.Sllbox2.addWidget(self.Sline_edit3)
        self.Sbox = QtWidgets.QHBoxLayout()
        self.Sbox.addLayout(self.Sllbox1)
        self.Sbox.addLayout(self.Sllbox2)
        self.Sgroup_box.setLayout(self.Sbox)
        self.Sbox2 = QtWidgets.QVBoxLayout()
        self.Sbox2.addWidget(self.Sgroup_box)
        self.Sbox2.addWidget(self.Sbtn)
        self.setLayout(self.Sbox2)
        self.Sbtn.clicked.connect(self.signUp_check)
 
    def signUp_check(self):
        if self.Sline_edit1.text() == "":
            self.Sline_edit1.setPlaceholderText("Enter login*")
        if self.Sline_edit2.text() == "":
            self.Sline_edit2.setPlaceholderText("Enter password*")
        if self.Sline_edit3.text() == "":
            self.Sline_edit3.setPlaceholderText("Repeat password*")
 
        if self.Sline_edit1 == "" or self.Sline_edit2 == "" or self.Sline_edit3 == "":
            return
 
        login = self.Sline_edit1.text()
        password = self.Sline_edit2.text()
        second_password = self.Sline_edit3.text()
 
        if password != second_password:
            self.Sline_edit3.setPlaceholderText("Wrong password*")
            return
 
        with open("file.dat", "rb") as file:
            dict_from_file = pickle.load(file)
 
        if login in dict_from_file:           #Должно появиться окно, сообщающее, что юзер уже зарегестрирован
            pass
        else:
            dict_from_file[login] = password
            with open("file.dat", "wb") as file:
                pickle.dump(dict_from_file, file)
            window = MainWindow()
            window.setWindowTitle("Application for work with db")
            window.resize(400, 150)
            window.show()
            window.exec_()
            self.close()
 
 
 
class ExtraWindow(QtWidgets.QDialog):
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent)
        extra_label1 = QtWidgets.QLabel("You have not signed up. Do you want to do it?")
        extra_btn1 = QtWidgets.QPushButton("SignUp")
        extra_btn2 = QtWidgets.QPushButton("Exit")
        extra_box2 = QtWidgets.QHBoxLayout()
        extra_box2.addWidget(extra_btn1)
        extra_box2.addWidget(extra_btn2)
        extra_box1 = QtWidgets.QVBoxLayout()
        extra_box1.addWidget(extra_label1)
        extra_box1.addLayout(extra_box2)
        self.setLayout(extra_box1)
        extra_btn1.clicked.connect(self.signUp)
        extra_btn2.clicked.connect(self.extra_close)
 
    def extra_close(self):
        self.close()
 
    def signUp(self):
        input_window.close()
        signUp_window = SignUp()
        signUp_window.setWindowTitle("SignUp")
        signUp_window.resize(400, 150)
        signUp_window.show()
        signUp_window.exec_()
        self.close()
 
 
class InputWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.group_box = QtWidgets.QGroupBox("Form")
        self.group_box.setStyleSheet("font-weight: bold")
        self.label1 = QtWidgets.QLabel("Login")
        self.label2 = QtWidgets.QLabel("Password")
        self.line_edit1 = QtWidgets.QLineEdit()
        self.line_edit2 = QtWidgets.QLineEdit()
        self.btn = QtWidgets.QPushButton("Send")
        self.llbox1 = QtWidgets.QVBoxLayout()
        self.llbox1.addWidget(self.label1)
        self.llbox1.addWidget(self.label2)
        self.llbox2 = QtWidgets.QVBoxLayout()
        self.llbox2.addWidget(self.line_edit1)
        self.llbox2.addWidget(self.line_edit2)
        self.box = QtWidgets.QHBoxLayout()
        self.box.addLayout(self.llbox1)
        self.box.addLayout(self.llbox2)
        self.group_box.setLayout(self.box)
        self.box2 = QtWidgets.QVBoxLayout()
        self.box2.addWidget(self.group_box)
        self.box2.addWidget(self.btn)
        self.setLayout(self.box2)
        self.btn.clicked.connect(self.input_check)
 
    def input_check(self):
        if self.line_edit1.text() == "":
            self.line_edit1.setPlaceholderText("Enter login*")
        if self.line_edit2.text() == "":
            self.line_edit2.setPlaceholderText("Enter password*")
 
        if self.line_edit1 == "" or self.line_edit2 == "":
            return
 
        login = self.line_edit1.text()
        password = self.line_edit2.text()
 
        user_dict = {login: password}
 
        my_list = []
        with open("file.dat", "wb") as file:
            pickle.dump(my_list, file)
 
        dict_from_file = {}
 
        with open("file.dat", "rb") as file:
            dict_from_file = pickle.load(file)
 
        if not login in dict_from_file:
            extra_window = ExtraWindow()
            extra_window.setWindowTitle("")
            extra_window.resize(400, 150)
            extra_window.show()
            extra_window.exec_()
        else:
            if dict_from_file[login] != user_dict[login]:
                self.line_edit2.setPlaceholderText("Wrong password*")
            else:
                window = MainWindow()
                window.setWindowTitle("Application for work with db")
                window.resize(400, 150)
                window.show()
                window.exec_()
                self.close()
 
 
class MainWindow(QtWidgets.QWidget):
    def __int__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    input_window = InputWindow()
    input_window.setWindowTitle("Input Window")
    input_window.resize(400, 150)
    input_window.show()
    sys.exit(app.exec_())
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.10.2020, 02:04
Ответы с готовыми решениями:

'bool' object has no attribute 'ui'
У меня проблема в том, что при запуске программы и нажатии на соответствующую кнопку, у меня вылезает ошибка, что якобы булевый объект не...

'QLineEdit' object has no attribute 'setEchoMod'
Нужно сделать так, чтобы в строку выводились вместо символом звёздочки(как при вводе пароля) Пытаюсь сделать это вот так: ...

AttributeError: 'bool' object has no attribute 'setText'
Я понять не могу, что ему нет так?Почему у него тип bool? import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton ...

21
0 / 0 / 0
Регистрация: 05.05.2020
Сообщений: 227
03.11.2020, 19:49  [ТС]
Студворк — интернет-сервис помощи студентам
Сергей225, естественно в 10 раз короче, у вас программа не такая как у меня. Сначала у меня запускается окно авторизации. При вводе данных, которые уже зарегистрированы, пользователю показывается главное окно. Если эти данные не зарегистрированы, то открывается окно с предложением зарегистрироваться. Если пользователь нажимает кнопку регистрации, то открывается окно регистрации, опять же при вводе верных данных открывается главное окно. Я использую проверку через файл, при вводе неверных данных в полях устанавливается надпись о неверных данных и т.д. И это я ещё не всё сделал, что необходимо. Ваш пример не идеален. Разве является читабельным отделение инициализации? Если уж написали класс с init, то зачем в отдельной функции что-то дописывать? При чём у вас даже нет привязки кнопки. Для привязки вам нужно написать ещё одну функцию и в первой функции сделать привязку ко второй. Плюс необходимо организовать связь окон. Я определил в классах login, password и т.д. отдельно, чтобы было понятно к чему оно относится, т.к. используется не в одной функции. Да и всё у меня получилось структурированно. В главном цикле я определяю экземпляры классов, где у меня описаны только функции инициализации. Отдельно определены функции, к которым привязаны кнопки (кнопки привязываются так же в главном цикле, что удобно). Если вы добавите ещё функций, то придётся как-то отличать функции инициализации от иных функций, чего я у себя избежал.

Добавлено через 41 минуту
P.S. Кнопка не отображалась, т.к. написал __int__() вместо __init__()
0
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
05.11.2020, 10:54
KaffLime, Ну где то правы. Просто у меня окно авторизации это как отдельный файл главный. После него перехожу по кнопке в другой модуль(файл) где остальная движуха и окно авторизации закрываю. Ну понятно что вы все одно место пытаетесь впихнуть все окна и прочее,может и логичнее у вас если маленькая пг. Я разделяю на модули(файлы), но с другой стороны много плодить файлов не надо. У меня допустим щас в одной программе файлов(модулей) больше 10шт. Каждое окно для разных задач,чтобы не путаться.Точнее не каждый файл окно,а еще собственная библиотека и другие. Это огромная программа где то минимум 5к строк кода)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.11.2020, 10:54

AttributeError: 'lab' object has no attribute 'mainloop'
Почему не работает код? Ошибка: Traceback (most recent call last): File "C:\Python34\lab5.py", line 32, in <module> if...

AttributeError: 'MainWindow' object has no attribute 'textEdit'
Изучение Питона начал с написания текстового редактора. Примеры в интернете или криво переведены или для 2.7, у меня 3.9 import sys...

AttributeError: 'function' object has no attribute 'x' - что это?
Вот моя функция для рисования треугольника, но когда я пытаюсь запустить её, мне выдаётся следующее исключение: class Point: ...

Как исправить проблему с 'MainWindow' object has no attribute 'tab_open_doubleclick'?
Здравствуйте, я решил написать маленький браузер и столкнулся с такой проблемой... Вот код на Python import sys import os from...

Attribute error 'tuple' object has no attribute 'employee_id'
Задача у меня такая собрать данные из базы и перевести в формат json. Использую Oracle. Если написать номера столбцов вручную, то все...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru