AttributeError: 'Messenger' object has no attribute 'pushButtondateadd'
Делал школьный проект, надо написать мессенджер. Во время написания функционала столкнулся с проблемой: питон говорит, что у него якобы нет такой кнопки, хотя в классе Main, от которого наследуется мой "основной" класс, все есть.
Заранее извиняюсь за глупый вопрос, никогда еще не работал с библиотекой PyQt5.
Основной код:
from PyQt5 import QtWidgets
from login import Login
from main import Main
from date import Date
import requests
class Messenger(Login, Main, Date):
def __init__(self):
super().__init__()
self.setupUi(self)
self.loginbutton.pressed.connect(self.login)
self.pushButtondateadd.pressed.connect(self.date)
def date(self):
window3.show()
def login(self):
name = self.lineEditLogin.text()
password = self.lineEditPassword.text()
user_data = {'name': name, 'password': password}
response = requests.post('http://127.0.0.1:5000/login', json=user_data)
if response.status_code != 200:
print('Проверка не пройдена')
else:
window1.hide()
window2.show()
app = QtWidgets.QApplication([])
window1 = Messenger()
window2 = Main()
window3 = Date()
window1.show()
app.exec_()
Код окна Login:
from PyQt5 import QtCore, QtGui, QtWidgets
class Login(QtWidgets.QDialog):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 182)
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(0, 15, 401, 31))
font = QtGui.QFont()
font.setPointSize(20)
self.label.setFont(font)
self.label.setTextFormat(QtCore.Qt.RichText)
self.label.setScaledContents(False)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setTextInteractionFlags(QtCore.Qt.NoTextInteraction)
self.label.setObjectName("label")
self.lineEditLogin = QtWidgets.QLineEdit(Dialog)
self.lineEditLogin.setGeometry(QtCore.QRect(210, 70, 141, 21))
self.lineEditLogin.setObjectName("lineEditLogin")
self.label_2 = QtWidgets.QLabel(Dialog)
self.label_2.setGeometry(QtCore.QRect(60, 70, 161, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(Dialog)
self.label_3.setGeometry(QtCore.QRect(50, 110, 191, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.lineEditPassword = QtWidgets.QLineEdit(Dialog)
self.lineEditPassword.setGeometry(QtCore.QRect(210, 110, 141, 21))
self.lineEditPassword.setObjectName("lineEditPassword")
self.loginbutton = QtWidgets.QPushButton(Dialog)
self.loginbutton.setGeometry(QtCore.QRect(160, 150, 91, 23))
self.loginbutton.setObjectName("loginbutton")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.label.setText(_translate("Dialog", "Мессенджер школы №7"))
self.label_2.setText(_translate("Dialog", "Введите логин:"))
self.label_3.setText(_translate("Dialog", "Введите пароль:"))
self.loginbutton.setText(_translate("Dialog", "Авторизоваться"))
Код основного окна:
from PyQt5 import QtCore, QtGui, QtWidgets
from date import Date
class Main(QtWidgets.QMainWindow, Date):
def __init__(self):
super().__init__()
self.setupUi(self)
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1920, 1080)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.dialogs = QtWidgets.QListWidget(self.centralwidget)
self.dialogs.setGeometry(QtCore.QRect(10, 10, 221, 491))
self.dialogs.setObjectName("dialogs")
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setGeometry(QtCore.QRect(520, 10, 331, 491))
self.groupBox.setObjectName("groupBox")
self.calendarWidget = QtWidgets.QCalendarWidget(self.groupBox)
self.calendarWidget.setGeometry(QtCore.QRect(0, 40, 331, 191))
self.calendarWidget.setObjectName("calendarWidget")
self.lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit.setEnabled(True)
self.lineEdit.setGeometry(QtCore.QRect(0, 0, 331, 31))
font = QtGui.QFont()
font.setPointSize(11)
font.setBold(True)
font.setWeight(75)
self.lineEdit.setFont(font)
self.lineEdit.setMouseTracking(False)
self.lineEdit.setTabletTracking(False)
self.lineEdit.setFocusPolicy(QtCore.Qt.NoFocus)
self.lineEdit.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
self.lineEdit.setMaxLength(2048)
self.lineEdit.setFrame(True)
self.lineEdit.setAlignment(QtCore.Qt.AlignCenter)
self.lineEdit.setPlaceholderText("")
self.lineEdit.setClearButtonEnabled(False)
self.lineEdit.setObjectName("lineEdit")
self.pushButtondateadd = QtWidgets.QPushButton(self.groupBox)
self.pushButtondateadd.setGeometry(QtCore.QRect(0, 240, 331, 21))
self.pushButtondateadd.setObjectName("pushButtondateadd")
self.dateinfo = QtWidgets.QTextBrowser(self.groupBox)
self.dateinfo.setGeometry(QtCore.QRect(0, 270, 331, 221))
self.dateinfo.setObjectName("dateinfo")
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(250, 10, 251, 441))
font = QtGui.QFont()
font.setStrikeOut(True)
self.textBrowser.setFont(font)
self.textBrowser.setObjectName("textBrowser")
self.message = QtWidgets.QTextEdit(self.centralwidget)
self.message.setGeometry(QtCore.QRect(250, 460, 161, 41))
self.message.setObjectName("message")
self.sendButton = QtWidgets.QPushButton(self.centralwidget)
self.sendButton.setGeometry(QtCore.QRect(420, 470, 81, 23))
self.sendButton.setObjectName("sendButton")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.groupBox.setTitle(_translate("MainWindow", "GroupBox"))
self.lineEdit.setText(_translate("MainWindow", "Календарь событий"))
self.pushButtondateadd.setText(_translate("MainWindow", "Добавить событие"))
self.sendButton.setText(_translate("MainWindow", "Отправить"))
Код окна с добавлением события (пока еще не законченный):
from PyQt5 import QtCore, QtGui, QtWidgets
class Date(QtWidgets.QDialog):
def __init__(self):
super().__init__()
self.setupUi(self)
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 346)
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(0, 10, 401, 41))
font = QtGui.QFont()
font.setPointSize(20)
self.label.setFont(font)
self.label.setTextFormat(QtCore.Qt.RichText)
self.label.setScaledContents(False)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setTextInteractionFlags(QtCore.Qt.NoTextInteraction)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(Dialog)
self.label_2.setGeometry(QtCore.QRect(40, 60, 151, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.datename = QtWidgets.QLineEdit(Dialog)
self.datename.setGeometry(QtCore.QRect(150, 60, 211, 21))
self.datename.setObjectName("datename")
self.label_3 = QtWidgets.QLabel(Dialog)
self.label_3.setGeometry(QtCore.QRect(80, 100, 151, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.datedate = QtWidgets.QDateEdit(Dialog)
self.datedate.setGeometry(QtCore.QRect(150, 100, 110, 22))
self.datedate.setObjectName("datedate")
self.datetime = QtWidgets.QTimeEdit(Dialog)
self.datetime.setGeometry(QtCore.QRect(150, 140, 118, 22))
self.datetime.setObjectName("datetime")
self.label_4 = QtWidgets.QLabel(Dialog)
self.label_4.setGeometry(QtCore.QRect(70, 140, 151, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(Dialog)
self.label_5.setGeometry(QtCore.QRect(40, 180, 151, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
self.dateinfo = QtWidgets.QTextEdit(Dialog)
self.dateinfo.setGeometry(QtCore.QRect(150, 180, 211, 101))
self.dateinfo.setObjectName("dateinfo")
self.pushButtonAdd = QtWidgets.QPushButton(Dialog)
self.pushButtonAdd.setGeometry(QtCore.QRect(260, 300, 91, 23))
self.pushButtonAdd.setObjectName("pushButtonAdd")
self.pushButtonCancel = QtWidgets.QPushButton(Dialog)
self.pushButtonCancel.setGeometry(QtCore.QRect(150, 300, 91, 23))
self.pushButtonCancel.setObjectName("pushButtonCancel")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.label.setText(_translate("Dialog", "Создание события"))
self.label_2.setText(_translate("Dialog", "Название:"))
self.label_3.setText(_translate("Dialog", "Дата:"))
self.label_4.setText(_translate("Dialog", "Время:"))
self.label_5.setText(_translate("Dialog", "Описание:"))
self.pushButtonAdd.setText(_translate("Dialog", "Добавить"))
self.pushButtonCancel.setText(_translate("Dialog", "Отмена"))
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
НИКОГДА !!! Не изменяйте код, сгенерированный Qt Designer. Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
import requests
from PyQt5 import QtCore, QtGui, QtWidgets
#from login import Login
#class Login(QtWidgets.QDialog):
class Ui_Login(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 182)
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(0, 15, 401, 31))
font = QtGui.QFont()
font.setPointSize(20)
self.label.setFont(font)
self.label.setTextFormat(QtCore.Qt.RichText)
self.label.setScaledContents(False)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setTextInteractionFlags(QtCore.Qt.NoTextInteraction)
self.label.setObjectName("label")
self.lineEditLogin = QtWidgets.QLineEdit(Dialog)
self.lineEditLogin.setGeometry(QtCore.QRect(210, 70, 141, 21))
self.lineEditLogin.setObjectName("lineEditLogin")
self.label_2 = QtWidgets.QLabel(Dialog)
self.label_2.setGeometry(QtCore.QRect(60, 70, 161, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(Dialog)
self.label_3.setGeometry(QtCore.QRect(50, 110, 191, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.lineEditPassword = QtWidgets.QLineEdit(Dialog)
self.lineEditPassword.setGeometry(QtCore.QRect(210, 110, 141, 21))
self.lineEditPassword.setObjectName("lineEditPassword")
self.loginbutton = QtWidgets.QPushButton(Dialog)
self.loginbutton.setGeometry(QtCore.QRect(160, 150, 91, 23))
self.loginbutton.setObjectName("loginbutton")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.label.setText(_translate("Dialog", "Мессенджер школы №7"))
self.label_2.setText(_translate("Dialog", "Введите логин:"))
self.label_3.setText(_translate("Dialog", "Введите пароль:"))
self.loginbutton.setText(_translate("Dialog", "Авторизоваться"))
#from date import Date
#class Date(QtWidgets.QDialog):
# def __init__(self):
# super().__init__()
# self.setupUi(self)
class Ui_Date(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 346)
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(0, 10, 401, 41))
font = QtGui.QFont()
font.setPointSize(20)
self.label.setFont(font)
self.label.setTextFormat(QtCore.Qt.RichText)
self.label.setScaledContents(False)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setTextInteractionFlags(QtCore.Qt.NoTextInteraction)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(Dialog)
self.label_2.setGeometry(QtCore.QRect(40, 60, 151, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.datename = QtWidgets.QLineEdit(Dialog)
self.datename.setGeometry(QtCore.QRect(150, 60, 211, 21))
self.datename.setObjectName("datename")
self.label_3 = QtWidgets.QLabel(Dialog)
self.label_3.setGeometry(QtCore.QRect(80, 100, 151, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.datedate = QtWidgets.QDateEdit(Dialog)
self.datedate.setGeometry(QtCore.QRect(150, 100, 110, 22))
self.datedate.setObjectName("datedate")
self.datetime = QtWidgets.QTimeEdit(Dialog)
self.datetime.setGeometry(QtCore.QRect(150, 140, 118, 22))
self.datetime.setObjectName("datetime")
self.label_4 = QtWidgets.QLabel(Dialog)
self.label_4.setGeometry(QtCore.QRect(70, 140, 151, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(Dialog)
self.label_5.setGeometry(QtCore.QRect(40, 180, 151, 21))
font = QtGui.QFont()
font.setPointSize(14)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
self.dateinfo = QtWidgets.QTextEdit(Dialog)
self.dateinfo.setGeometry(QtCore.QRect(150, 180, 211, 101))
self.dateinfo.setObjectName("dateinfo")
self.pushButtonAdd = QtWidgets.QPushButton(Dialog)
self.pushButtonAdd.setGeometry(QtCore.QRect(260, 300, 91, 23))
self.pushButtonAdd.setObjectName("pushButtonAdd")
self.pushButtonCancel = QtWidgets.QPushButton(Dialog)
self.pushButtonCancel.setGeometry(QtCore.QRect(150, 300, 91, 23))
self.pushButtonCancel.setObjectName("pushButtonCancel")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.label.setText(_translate("Dialog", "Создание события"))
self.label_2.setText(_translate("Dialog", "Название:"))
self.label_3.setText(_translate("Dialog", "Дата:"))
self.label_4.setText(_translate("Dialog", "Время:"))
self.label_5.setText(_translate("Dialog", "Описание:"))
self.pushButtonAdd.setText(_translate("Dialog", "Добавить"))
self.pushButtonCancel.setText(_translate("Dialog", "Отмена"))
#from main import Main
#class Main(QtWidgets.QMainWindow, Date):
# def __init__(self):
# super().__init__()
# self.setupUi(self)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1920, 1080)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.dialogs = QtWidgets.QListWidget(self.centralwidget)
self.dialogs.setGeometry(QtCore.QRect(10, 10, 221, 491))
self.dialogs.setObjectName("dialogs")
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setGeometry(QtCore.QRect(520, 10, 331, 491))
self.groupBox.setObjectName("groupBox")
self.calendarWidget = QtWidgets.QCalendarWidget(self.groupBox)
self.calendarWidget.setGeometry(QtCore.QRect(0, 40, 331, 191))
self.calendarWidget.setObjectName("calendarWidget")
self.lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit.setEnabled(True)
self.lineEdit.setGeometry(QtCore.QRect(0, 0, 331, 31))
font = QtGui.QFont()
font.setPointSize(11)
font.setBold(True)
font.setWeight(75)
self.lineEdit.setFont(font)
self.lineEdit.setMouseTracking(False)
self.lineEdit.setTabletTracking(False)
self.lineEdit.setFocusPolicy(QtCore.Qt.NoFocus)
self.lineEdit.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
self.lineEdit.setMaxLength(2048)
self.lineEdit.setFrame(True)
self.lineEdit.setAlignment(QtCore.Qt.AlignCenter)
self.lineEdit.setPlaceholderText("")
self.lineEdit.setClearButtonEnabled(False)
self.lineEdit.setObjectName("lineEdit")
self.pushButtondateadd = QtWidgets.QPushButton(self.groupBox)
self.pushButtondateadd.setGeometry(QtCore.QRect(0, 240, 331, 21))
self.pushButtondateadd.setObjectName("pushButtondateadd")
self.dateinfo = QtWidgets.QTextBrowser(self.groupBox)
self.dateinfo.setGeometry(QtCore.QRect(0, 270, 331, 221))
self.dateinfo.setObjectName("dateinfo")
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(250, 10, 251, 441))
font = QtGui.QFont()
font.setStrikeOut(True)
self.textBrowser.setFont(font)
self.textBrowser.setObjectName("textBrowser")
self.message = QtWidgets.QTextEdit(self.centralwidget)
self.message.setGeometry(QtCore.QRect(250, 460, 161, 41))
self.message.setObjectName("message")
self.sendButton = QtWidgets.QPushButton(self.centralwidget)
self.sendButton.setGeometry(QtCore.QRect(420, 470, 81, 23))
self.sendButton.setObjectName("sendButton")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.groupBox.setTitle(_translate("MainWindow", "GroupBox"))
self.lineEdit.setText(_translate("MainWindow", "Календарь событий"))
self.pushButtondateadd.setText(_translate("MainWindow", "Добавить событие"))
self.sendButton.setText(_translate("MainWindow", "Отправить"))
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
class Login(QtWidgets.QDialog, Ui_Login):
def __init__(self):
super().__init__()
self.setupUi(self)
class Login(QtWidgets.QDialog, Ui_Login):
def __init__(self):
super().__init__()
self.setupUi(self)
class FormDate(QtWidgets.QDialog, Ui_Date):
def __init__(self):
super().__init__()
self.setupUi(self)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# !!! Множественное наследование применяйте только если вы понимаете что делаете. !!!
#class Messenger(Login, Main, Date):
class Messenger(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
# self.loginbutton.pressed.connect(self.login)
# self.pushButtondateadd.pressed.connect(self.date)
self.pushButtondateadd.clicked.connect(self._date) # clicked
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.form_login = Login()
self.form_login.show()
self.form_login.loginbutton.clicked.connect(self.login)
self.form_date = FormDate()
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def _date(self):
# window3.show()
self.form_date.show()
def login(self):
name = self.form_login.lineEditLogin.text()
password = self.form_login.lineEditPassword.text()
user_data = {'name': name, 'password': password}
#! response = requests.post('http://127.0.0.1:5000/login', json=user_data)
#! if response.status_code != 200:
if name != 'name' or password != 'password':
print('Проверка не пройдена')
msg = QtWidgets.QMessageBox.information(
self,
"Внимание!",
"Что-то пошло не так, попробуйте еще раз."
)
else:
self.form_login.hide()
self.show()
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window1 = Messenger()
# window2 = Main()
# window3 = Date()
## window1.show()
sys.exit(app.exec_())

