ОС: Windows
Версия Python: 3.11.2
Создал два класса, один для основного окна программы, другой для окна диалога. В диалоге добавляю данные в таблицу БД, после добавления хочу сделать обновление таблицы с данными, чтобы появилась новая запись. При обращении к функции главного класса получаю ошибку, что объекты не имеют атрибута. Искал решение в гугле, писали про работу с сигналами, но реализовать так и не удалось. Подскажите, пожалуйста, решение. Я учусь.
Версия 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
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()