При обращении к функции получаю ошибку "object has no attribute"

FRAO

Новичок
Пользователь
Апр 1, 2023
1
0
1
ОС: Windows
Версия Python: 3.11.2
certifi 2022.12.7
charset-normalizer 3.1.0
et-xmlfile 1.1.0
idna 3.4
mysql-connector-python-rf 2.2.2
numpy 1.24.2
openpyxl 3.1.2
pandas 1.5.3
pip 21.3.1
PySide6 6.4.2
PySide6-Addons 6.4.2
PySide6-Essentials 6.4.2
python-dateutil 2.8.2
pytz 2022.7.1
requests 2.28.2
setuptools 60.2.0
shiboken6 6.4.2
six 1.16.0
urllib3 1.26.15
wheel 0.37.1
Создал два класса, один для основного окна программы, другой для окна диалога. В диалоге добавляю данные в таблицу БД, после добавления хочу сделать обновление таблицы с данными, чтобы появилась новая запись. При обращении к функции главного класса получаю ошибку, что объекты не имеют атрибута. Искал решение в гугле, писали про работу с сигналами, но реализовать так и не удалось. Подскажите, пожалуйста, решение. Я учусь.
Python:
import sys
import database

from PySide6 import QtCore, QtWidgets
from PySide6.QtWidgets import (QTableWidgetItem, QMessageBox)
from main_ui import Ui_MainWindow
from dialog_patient_ui import Ui_Dialog_new_patient
from datetime import datetime


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.twoWindow = None
        self.animation = None
        self.clickPosition = None
        self.setupUi(self)
        # Скрыть статус-бар
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        # Кнопка выход из программы
        self.btn_close.clicked.connect(lambda: sys.exit())
        # Кнопка развертывания окна
        self.btn_maximize_restore.clicked.connect(self.MaximaWindow)
        # Кнопка сворачивания окна
        self.btn_minimize.clicked.connect(lambda: self.showMinimized())
        # Перетаскивание окна
        self.frame_main.mouseMoveEvent = self.MoveWindow
        # Открытие меню
        self.btn_toggle_menu.clicked.connect(self.leftMenu)
        # Система переключения между страницами
        self.btn_patients.clicked.connect(lambda: self.stackedWidget.setCurrentWidget(self.pg_patients))

        # Загрузка страницы "Пациенты"
        self.btn_patients.clicked.connect(self.select_patients)
        self.btn_app.clicked.connect(self.reload)

        ## Правка таблицы
        header = self.tbl_patients.horizontalHeader()
        header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
        header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch)
        header.setSectionResizeMode(4, QtWidgets.QHeaderView.Stretch)

        # Открытие диалога "Добавление пациента"
        self.btn_add_pat.clicked.connect(self.OpenDialogPatient)

    # Функция фуллскрина
    def MaximaWindow(self):
        window_width = self.centralwidget.width()
        if window_width == 1000:
            self.showFullScreen()
            self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        else:
            self.showNormal()
            self.horizontalLayout.setContentsMargins(10, 10, 10, 10)

    # Функция перетаскивания окна
    def MoveWindow(self, event):
        if not self.isFullScreen():
            self.move(self.pos() + event.globalPosition().toPoint() - self.clickPosition)
            self.clickPosition = event.globalPosition().toPoint()
            event.accept()
            pass

    def mousePressEvent(self, event):
        self.clickPosition = event.globalPosition().toPoint()
        pass

    # Функция проигрывания анимации открытия и закрытия меню
    def leftMenu(self):
        width = self.frame_left_menu.width()
        if width == 70:
            newWidth = 200
        else:
            newWidth = 70

        self.animation = QtCore.QPropertyAnimation(self.frame_left_menu, b"maximumWidth")
        self.animation.setDuration(500)
        self.animation.setStartValue(width)
        self.animation.setEndValue(newWidth)
        self.animation.setEasingCurve(QtCore.QEasingCurve.InOutQuart)
        self.animation.start()

    def OpenDialogPatient(self):
        # print (5)
        self.twoWindow = PatientDialog()
        self.twoWindow.show()

    def select_patients(self):
        self.label_top_info.setText("| ПАЦИЕНТЫ")
        result = database.ConnectToMYSQL().get_all_data_from_db()

        if result:
            self.tbl_patients.setRowCount(len(result))
            for row, item in enumerate(result):
                Col_1_item = QTableWidgetItem(str(item['print_name']))
                Col_2_item = QTableWidgetItem(str(item['NumCard']))
                Col_3_item = QTableWidgetItem(str(item['Age']))
                Col_4_item = QTableWidgetItem(str(item['DateofPost']))
                Col_5_item = QTableWidgetItem(str(0))

                self.tbl_patients.setItem(row, 0, Col_1_item)
                self.tbl_patients.setItem(row, 1, Col_2_item)
                self.tbl_patients.setItem(row, 2, Col_3_item)
                self.tbl_patients.setItem(row, 3, Col_4_item)
                self.tbl_patients.setItem(row, 4, Col_5_item)

        else:
            QMessageBox.information(self, "Warning", "No data in DB")
            return

    def reload(self):
        self.select_patients()
        print("1")


class PatientDialog(QtWidgets.QDialog, Ui_Dialog_new_patient, MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        # Скрыть статус-бар
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        # Закрыть модальное окно
        self.btn_close.clicked.connect(lambda: self.close())
        # Добавить пациента
        self.btn_add.clicked.connect(self.addPat)
        # Получить текущую дату
        now = datetime.now()
        self.dt_post.setDate(now)

    def addPat(self):
        lastname = str(self.txt_lastname.text())
        firstname = str(self.txt_firstname.text())
        patronymic = str(self.txt_patronymic.text())
        print_name = str(self.txt_lastname.text() + " " + self.txt_firstname.text() + " " + self.txt_patronymic.text())
        date_of_b = datetime.strptime(self.dt_birth.text(), '%d.%m.%Y').date()
        sex = str(self.cb_sex.currentText())
        h = str(self.txt_h.text())
        w = str(self.txt_w.text())
        numer = str(self.txt_numer.text())
        date_of_p = datetime.strptime(self.dt_post.text(), '%d.%m.%Y').date()
        dep = str(self.cb_dep.currentText())
        diagnos1 = str(self.txt_diagnos1.toPlainText())
        diagnos3 = str(self.txt_diagnos3.toPlainText())
        blood = str(self.cb_blood.currentText())
        rh = str(self.cb_rh.currentText())
        kell = str(self.cb_kell.currentText())
        allergy = str(self.txt_allergy.text())
        #
        database.ConnectToMYSQL().AddPatientToDataBase(
            lastname,
            firstname,
            patronymic,
            print_name,
            date_of_b,
            sex,
            h,
            w,
            numer,
            date_of_p,
            dep,
            diagnos1,
            diagnos3,
            blood,
            rh,
            kell,
            allergy
        )

        # Закрыть окно
        self.close()
        self.reload()


def main():
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()
 

Форум IT Специалистов