Как подключить скрипт python к кнопке в PyQt5?

#python #pyqt5

Вопрос:

Я пытался создать графический интерфейс для настольного приложения, и из одного окна я хотел подключить одну из кнопок к другому сценарию, на самом деле он работает нормально, за исключением функции, которая отвечает за отображение второго окна «exit_popup_message» в update_window.py поэтому я успешно запускаю первый файл и нажимаю кнопку «обновить пользователя», он успешно запускает второе окно, но всякий раз, когда я нажимаю на выход во втором окне, он вылетает и выдает эту ошибку:

Процесс завершен с кодом выхода -1073740791 (0xC0000409)

update_window.py:

 from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtCore import QDate
import sys
class Ui_UpdatePage(object):
   def setupUi(self, UpdatePage):

       #Update page
       UpdatePage.setObjectName("UpdatePage")
       UpdatePage.setEnabled(True)
       UpdatePage.setFixedSize(400, 350)
       sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
       sizePolicy.setHorizontalStretch(0)
       sizePolicy.setVerticalStretch(0)
       sizePolicy.setHeightForWidth(UpdatePage.sizePolicy().hasHeightForWidth())
       UpdatePage.setSizePolicy(sizePolicy)
       font = QtGui.QFont()
       font.setPointSize(10)
       UpdatePage.setFont(font)
       UpdatePage.setFocusPolicy(QtCore.Qt.StrongFocus)
       icon = QtGui.QIcon()
       icon.addPixmap(QtGui.QPixmap("D:/FIU/Graduation project/covid_tracer/regist_icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
       UpdatePage.setWindowIcon(icon)
       UpdatePage.setWindowOpacity(100.0)
       UpdatePage.setAutoFillBackground(True)
       UpdatePage.setDocumentMode(True)
       UpdatePage.setTabShape(QtWidgets.QTabWidget.Rounded)
       self.centralwidget = QtWidgets.QWidget(UpdatePage)
       self.centralwidget.setObjectName("centralwidget")
       self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
       self.verticalLayoutWidget.setGeometry(QtCore.QRect(40, 20, 320, 300))
       self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
       self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
       self.verticalLayout.setContentsMargins(0, 0, 0, 0)
       self.verticalLayout.setObjectName("verticalLayout")
       self.formLayout = QtWidgets.QFormLayout()
       self.formLayout.setObjectName("formLayout")


       #Registration Form Label
       self.reg_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(20)
       font.setBold(True)
       font.setWeight(75)
       self.reg_label.setFont(font)
       self.reg_label.setLayoutDirection(QtCore.Qt.LeftToRight)
       self.reg_label.setAlignment(QtCore.Qt.AlignCenter)
       self.reg_label.setObjectName("reg_label")
       self.formLayout.setWidget(1, QtWidgets.QFormLayout.SpanningRole, self.reg_label)


       #ID Number
       self.id_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(10)
       self.id_label.setFont(font)
       self.id_label.setObjectName("id_label")
       self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.id_label)
       self.id_input = QtWidgets.QLineEdit(self.verticalLayoutWidget)
       self.id_input.setStyleSheet("id_input->rgb(191, 126, 255)")
       self.id_input.setFrame(True)
       self.id_input.setEchoMode(QtWidgets.QLineEdit.Normal)
       self.id_input.setCursorPosition(0)
       self.id_input.setDragEnabled(False)
       self.id_input.setReadOnly(False)
       self.id_input.setClearButtonEnabled(False)
       self.id_input.setObjectName("id_input")
       self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.id_input)


       #Phone Number
       self.phone_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(10)
       self.phone_label.setFont(font)
       self.phone_label.setObjectName("phone_label")
       self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.phone_label)
       self.phone_input = QtWidgets.QLineEdit(self.verticalLayoutWidget)
       self.phone_input.setObjectName("phone_input")
       self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.phone_input)


       #Name amp; Surname
       self.name_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(10)
       self.name_label.setFont(font)
       self.name_label.setObjectName("name_label")
       self.formLayout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.name_label)
       self.name_input = QtWidgets.QLineEdit(self.verticalLayoutWidget)
       self.name_input.setObjectName("name_input")
       self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.name_input)

       self.SuName_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(10)
       self.SuName_label.setFont(font)
       self.SuName_label.setObjectName("SuName_label")
       self.formLayout.setWidget(8, QtWidgets.QFormLayout.LabelRole, self.SuName_label)
       self.SuName_input = QtWidgets.QLineEdit(self.verticalLayoutWidget)
       self.SuName_input.setObjectName("SuName_input")
       self.formLayout.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.SuName_input)

       #Date of birth
       self.DOB_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(10)
       self.DOB_label.setFont(font)
       self.DOB_label.setObjectName("DOB_label")
       self.formLayout.setWidget(9, QtWidgets.QFormLayout.LabelRole, self.DOB_label)
       self.DOB_input = QtWidgets.QDateEdit(self.verticalLayoutWidget)
       self.DOB_input.setObjectName("DOB_input")
       self.formLayout.setWidget(9, QtWidgets.QFormLayout.FieldRole, self.DOB_input)


       #Gender
       self.G_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(10)
       self.G_label.setFont(font)
       self.G_label.setObjectName("gender")
       self.formLayout.setWidget(11, QtWidgets.QFormLayout.LabelRole, self.G_label)
       self.gender = QtWidgets.QComboBox(self.verticalLayoutWidget)
       self.gender.setObjectName("gender")
       self.gender.addItem("")
       self.gender.addItem("")
       self.formLayout.setWidget(11, QtWidgets.QFormLayout.FieldRole, self.gender)


       #Registration Date
       self.regiDate_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(10)
       self.regiDate_label.setFont(font)
       self.regiDate_label.setObjectName("registrationDate_label")
       self.formLayout.setWidget(12, QtWidgets.QFormLayout.LabelRole, self.regiDate_label)
       self.regiDate_input = QtWidgets.QDateEdit(self.verticalLayoutWidget)
       self.regiDate_input.setObjectName("regiDate_input")
       self.formLayout.setWidget(12, QtWidgets.QFormLayout.FieldRole, self.regiDate_input)



       self.horizontalLayout = QtWidgets.QHBoxLayout()
       self.horizontalLayout.setObjectName("horizontalLayout")


       #Save button
       self.b1_save = QtWidgets.QPushButton(self.verticalLayoutWidget)
       self.b1_save.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
       self.b1_save.setStyleSheet("")
       self.b1_save.setObjectName("b1_save")
       self.horizontalLayout.addWidget(self.b1_save)
       self.b1_save.clicked.connect(self.save_data)
       self.b1_save.setDefault(False);
       self.b1_save.setAutoDefault(True);


       #exit button
       self.b2_exit = QtWidgets.QPushButton(self.verticalLayoutWidget)
       self.b2_exit.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
       self.b2_exit.setObjectName("b2_cansel")
       self.horizontalLayout.addWidget(self.b2_exit)
       self.b2_exit.clicked.connect(self.exit_popup_message)
       self.b2_exit.setDefault(False);
       self.b2_exit.setAutoDefault(True);


       self.formLayout.setLayout(16, QtWidgets.QFormLayout.SpanningRole, self.horizontalLayout)
       spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
       self.formLayout.setItem(15, QtWidgets.QFormLayout.LabelRole, spacerItem)
       self.verticalLayout.addLayout(self.formLayout)
       UpdatePage.setCentralWidget(self.centralwidget)
       self.menubar = QtWidgets.QMenuBar(UpdatePage)
       self.menubar.setGeometry(QtCore.QRect(0, 0, 398, 21))
       self.menubar.setObjectName("menubar")
       UpdatePage.setMenuBar(self.menubar)

       self.retranslateUi(UpdatePage)
       QtCore.QMetaObject.connectSlotsByName(UpdatePage)
       UpdatePage.setTabOrder(self.id_input, self.phone_input)
       UpdatePage.setTabOrder(self.phone_input, self.name_input)
       UpdatePage.setTabOrder(self.name_input, self.SuName_input)
       UpdatePage.setTabOrder(self.SuName_input, self.DOB_input)
       UpdatePage.setTabOrder(self.DOB_input, self.gender)
       UpdatePage.setTabOrder(self.gender, self.regiDate_input)
       UpdatePage.setTabOrder(self.regiDate_input, self.b1_save)
       UpdatePage.setTabOrder(self.b1_save, self.b2_exit)


   def retranslateUi(self, UpdatePage):
       _translate = QtCore.QCoreApplication.translate
       UpdatePage.setWindowTitle(_translate("RegisterPage", "Update Form"))
       self.reg_label.setText(_translate("RegisterPage", "User Update Form"))
       self.id_label.setText(_translate("RegisterPage", "ID Number"))
       self.phone_label.setText(_translate("RegisterPage", "Phone Number"))
       self.name_label.setText(_translate("RegisterPage", "Name"))
       self.SuName_label.setText(_translate("RegisterPage", "Surname"))
       self.DOB_label.setText(_translate("RegisterPage", "Date Of Birth"))
       self.G_label.setText(_translate("RegisterPage", "Gender"))
       self.gender.setItemText(0, _translate("RegisterPage", "Male"))
       self.gender.setItemText(1, _translate("RegisterPage", "Female"))
       self.regiDate_label.setText(_translate("RegisterPage", "Registration Date"))
       self.b1_save.setText(_translate("RegisterPage", "Save"))
       self.b2_exit.setText(_translate("RegisterPage", "Exit"))


   #Saving the input data
   def save_data (self):
       if self.id_input.text() == "" or self.phone_input.text() == "" or self.name_input.text() == "" or self.SuName_input.text() == "":
           msg = QMessageBox()
           msg.setWindowTitle("Warning!")
           msg.setText("All fields must be filled!")
           msg.setIcon(QMessageBox.Warning)
           msg.setStandardButtons(QMessageBox.Ok)
           x = msg.exec_()
       else:
           ID = self.id_input.text()
           Phone = self.phone_input.text()
           Name = self.name_input.text()
           SurName = self.SuName_input.text()
           date = self.DOB_input.date().toPyDate()
           Gender = self.gender.currentText()
           RegiDate = self.regiDate_input.date().toPyDate()

           print(ID, Phone, Name, SurName, date, Gender, RegiDate)
           msg = QMessageBox()
           msg.setWindowTitle("Confirmation")
           msg.setText("Data saved successfully!")
           msg.setIcon(QMessageBox.Information)
           x = msg.exec_()
           if x == QMessageBox.Ok:
               self.id_input.clear()
               self.phone_input.clear()
               self.name_input.clear()
               self.SuName_input.clear()
               self.DOB_input.setDate(QDate(2000, 1, 1))
               self.regiDate_input.setDate(QDate(2000, 1, 1))


   #Exit the window
   def exit_popup_message (self):
       msg = QMessageBox()
       msg.setWindowTitle("Warning")
       msg.setText("Are you sure you want to exit?")
       msg.setIcon(QMessageBox.Question)
       msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
       x = msg.exec_()
       if x == msg.Yes:
           UpdatePage.close()


if __name__ == "__main__":
   app = QtWidgets.QApplication(sys.argv)
   UpdatePage = QtWidgets.QMainWindow()
   ui = Ui_UpdatePage()
   ui.setupUi(UpdatePage)
   UpdatePage.show()
   sys.exit(app.exec_())
 

user_info.py:

 from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
from update_window import Ui_UpdatePage
import sys
import update_window



class Ui_User_Info(object):
   def setupUi(self, User_Info):
       # User info page
       User_Info.setObjectName("User_Info")
       User_Info.setWindowModality(QtCore.Qt.NonModal)
       User_Info.setFixedSize(522, 422)
       User_Info.statusBar().setSizeGripEnabled(False)
       sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
       sizePolicy.setHorizontalStretch(0)
       sizePolicy.setVerticalStretch(0)
       sizePolicy.setHeightForWidth(User_Info.sizePolicy().hasHeightForWidth())
       User_Info.setSizePolicy(sizePolicy)
       icon = QtGui.QIcon()
       icon.addPixmap(QtGui.QPixmap("D:/FIU/Graduation project/covid_tracer/user_icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
       User_Info.setWindowIcon(icon)


       self.centralwidget = QtWidgets.QWidget(User_Info)
       self.centralwidget.setObjectName("centralwidget")
       self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
       self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 0, 501, 191))
       self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
       self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
       self.verticalLayout.setContentsMargins(0, 0, 0, 0)
       self.verticalLayout.setObjectName("verticalLayout")
       self.horizontalLayout = QtWidgets.QHBoxLayout()
       self.horizontalLayout.setObjectName("horizontalLayout")

       # ID Number
       self.id_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(12)
       font.setBold(True)
       font.setWeight(75)
       self.id_label.setFont(font)
       self.id_label.setObjectName("id_label")
       self.horizontalLayout.addWidget(self.id_label)
       self.id_output = QtWidgets.QLabel(self.verticalLayoutWidget)
       self.id_output.setObjectName("id_output")
       self.horizontalLayout.addWidget(self.id_output)

       # Phone Number
       self.Ph_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(12)
       font.setBold(True)
       font.setWeight(75)
       self.Ph_label.setFont(font)
       self.Ph_label.setObjectName("Ph_label")
       self.horizontalLayout.addWidget(self.Ph_label)
       self.Ph_output = QtWidgets.QLabel(self.verticalLayoutWidget)
       self.Ph_output.setObjectName("Ph_output")
       self.horizontalLayout.addWidget(self.Ph_output)
       self.verticalLayout.addLayout(self.horizontalLayout)
       self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
       self.horizontalLayout_4.setObjectName("horizontalLayout_4")

       # Name amp; Surname
       self.name_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(12)
       font.setBold(True)
       font.setWeight(75)
       self.name_label.setFont(font)
       self.name_label.setObjectName("name_label")
       self.horizontalLayout_4.addWidget(self.name_label)
       self.name_output = QtWidgets.QLabel(self.verticalLayoutWidget)
       self.name_output.setObjectName("name_output")
       self.horizontalLayout_4.addWidget(self.name_output)

       self.SuName_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(12)
       font.setBold(True)
       font.setWeight(75)
       self.SuName_label.setFont(font)
       self.SuName_label.setObjectName("SuName_label")
       self.horizontalLayout_4.addWidget(self.SuName_label)
       self.SuName_output = QtWidgets.QLabel(self.verticalLayoutWidget)
       self.SuName_output.setObjectName("SuName_output")
       self.horizontalLayout_4.addWidget(self.SuName_output)
       self.verticalLayout.addLayout(self.horizontalLayout_4)
       self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
       self.horizontalLayout_5.setObjectName("horizontalLayout_5")

       # Gender
       self.G_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(12)
       font.setBold(True)
       font.setWeight(75)
       self.G_label.setFont(font)
       self.G_label.setObjectName("G_label")
       self.horizontalLayout_5.addWidget(self.G_label)
       self.G_output = QtWidgets.QLabel(self.verticalLayoutWidget)
       self.G_output.setObjectName("G_output")
       self.horizontalLayout_5.addWidget(self.G_output)

       # Date Of Birth
       self.DOB_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(12)
       font.setBold(True)
       font.setWeight(75)
       self.DOB_label.setFont(font)
       self.DOB_label.setObjectName("DOB_label")
       self.horizontalLayout_5.addWidget(self.DOB_label)
       self.DOB_output = QtWidgets.QLabel(self.verticalLayoutWidget)
       self.DOB_output.setObjectName("DOB_output")
       self.horizontalLayout_5.addWidget(self.DOB_output)
       self.verticalLayout.addLayout(self.horizontalLayout_5)
       self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
       self.horizontalLayout_10.setObjectName("horizontalLayout_10")

       # Registration Date
       self.regiDate_label = QtWidgets.QLabel(self.verticalLayoutWidget)
       font = QtGui.QFont()
       font.setPointSize(12)
       font.setBold(True)
       font.setWeight(75)
       self.regiDate_label.setFont(font)
       self.regiDate_label.setObjectName("regiDate_label")
       self.horizontalLayout_10.addWidget(self.regiDate_label)
       self.regiDate_output = QtWidgets.QLabel(self.verticalLayoutWidget)
       self.regiDate_output.setObjectName("regiDate_output")
       self.horizontalLayout_10.addWidget(self.regiDate_output)

       spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
       self.horizontalLayout_10.addItem(spacerItem)
       self.verticalLayout.addLayout(self.horizontalLayout_10)
       self.horizontalLayoutWidget_4 = QtWidgets.QWidget(self.centralwidget)
       self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(10, 210, 501, 141))
       self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
       self.horizontalLayout_8 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
       self.horizontalLayout_8.setContentsMargins(0, 0, 0, 0)
       self.horizontalLayout_8.setObjectName("horizontalLayout_8")
       self.verticalLayout_2 = QtWidgets.QVBoxLayout()
       self.verticalLayout_2.setObjectName("verticalLayout_2")

       # PCR History
       self.PCR_label = QtWidgets.QLabel(self.horizontalLayoutWidget_4)
       font = QtGui.QFont()
       font.setPointSize(12)
       font.setBold(True)
       font.setWeight(75)
       self.PCR_label.setFont(font)
       self.PCR_label.setObjectName("PCR_label")
       self.verticalLayout_2.addWidget(self.PCR_label)
       spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
       self.verticalLayout_2.addItem(spacerItem1)

       # Add Reocrd Button
       self.b1_add = QtWidgets.QPushButton(self.horizontalLayoutWidget_4)
       self.b1_add.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
       self.b1_add.setObjectName("b1_add")
       self.verticalLayout_2.addWidget(self.b1_add)
       spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
       self.verticalLayout_2.addItem(spacerItem2)
       self.horizontalLayout_8.addLayout(self.verticalLayout_2)

       # PCR Table
       self.PCR_Table = QtWidgets.QTableWidget(self.horizontalLayoutWidget_4)
       self.PCR_Table.setObjectName("PCR_Table")
       self.PCR_Table.setColumnCount(2)
       self.PCR_Table.setRowCount(0)
       item = QtWidgets.QTableWidgetItem()
       self.PCR_Table.setHorizontalHeaderItem(0, item)
       item = QtWidgets.QTableWidgetItem()
       self.PCR_Table.setHorizontalHeaderItem(1, item)
       self.horizontalLayout_8.addWidget(self.PCR_Table)
       self.horizontalLayoutWidget_5 = QtWidgets.QWidget(self.centralwidget)
       self.horizontalLayoutWidget_5.setGeometry(QtCore.QRect(40, 350, 441, 51))
       self.horizontalLayoutWidget_5.setObjectName("horizontalLayoutWidget_5")
       self.horizontalLayout_9 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_5)
       self.horizontalLayout_9.setContentsMargins(0, 0, 0, 0)
       self.horizontalLayout_9.setObjectName("horizontalLayout_9")

       # Update Button
       self.b2_update = QtWidgets.QPushButton(self.horizontalLayoutWidget_5)
       self.b2_update.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
       self.b2_update.setObjectName("b2_update")
       self.horizontalLayout_9.addWidget(self.b2_update)
       self.b2_update.clicked.connect(self.update_button)

       # Remove Button
       self.b3_remove = QtWidgets.QPushButton(self.horizontalLayoutWidget_5)
       self.b3_remove.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
       self.b3_remove.setObjectName("b3_remove")
       self.horizontalLayout_9.addWidget(self.b3_remove)

       # Exit Button
       self.b4_exit = QtWidgets.QPushButton(self.horizontalLayoutWidget_5)
       self.b4_exit.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
       self.b4_exit.setObjectName("b4_exit")
       self.horizontalLayout_9.addWidget(self.b4_exit)
       self.b4_exit.clicked.connect(self.exit_popup_message)

       User_Info.setCentralWidget(self.centralwidget)
       self.statusbar = QtWidgets.QStatusBar(User_Info)
       self.statusbar.setObjectName("statusbar")
       User_Info.setStatusBar(self.statusbar)

       self.retranslateUi(User_Info)
       QtCore.QMetaObject.connectSlotsByName(User_Info)


   def retranslateUi(self, User_Info):
       _translate = QtCore.QCoreApplication.translate
       User_Info.setWindowTitle(_translate("User_Info", "User Information"))
       self.id_label.setText(_translate("User_Info", "ID Number:"))
       self.id_output.setText(_translate("User_Info", "- - - - - - - - - -"))
       self.Ph_label.setText(_translate("User_Info", "Phone Number:"))
       self.Ph_output.setText(_translate("User_Info", "- - - - - - - - - - "))
       self.name_label.setText(_translate("User_Info", "Name:"))
       self.name_output.setText(_translate("User_Info", "- - - - - - - - - - "))
       self.SuName_label.setText(_translate("User_Info", "Surname:"))
       self.SuName_output.setText(_translate("User_Info", "- - - - - - - - - - "))
       self.G_label.setText(_translate("User_Info", "Gender:"))
       self.G_output.setText(_translate("User_Info", "- - - - - - - - - - "))
       self.DOB_label.setText(_translate("User_Info", "Date Of Birth:"))
       self.DOB_output.setText(_translate("User_Info", "- - - - - - - - - - "))
       self.regiDate_label.setText(_translate("User_Info", "Registration Date:"))
       self.regiDate_output.setText(_translate("User_Info", "- - - - - - - - - - "))
       self.PCR_label.setText(_translate("User_Info", "PCR History:"))
       self.b1_add.setText(_translate("User_Info", "Add PCR Record"))
       item = self.PCR_Table.horizontalHeaderItem(0)
       item.setText(_translate("User_Info", "Test Date"))
       item = self.PCR_Table.horizontalHeaderItem(1)
       item.setText(_translate("User_Info", "Result"))
       self.b2_update.setText(_translate("User_Info", "Update User"))
       self.b3_remove.setText(_translate("User_Info", "Remove User"))
       self.b4_exit.setText(_translate("User_Info", "Exit"))

       self.id_output.setText("1603010021")
       self.Ph_output.setText(" 905428769636")
       self.name_output.setText("Osama")
       self.SuName_output.setText("Abdelgawad")
       self.G_output.setText("Male")
       self.DOB_output.setText("1996-17-05")
       self.regiDate_output.setText("2021-04-09")

   def exit_popup_message(self):
       msg = QMessageBox()
       msg.setWindowTitle("Warning")
       msg.setText("Are you sure you want to exit?")
       msg.setIcon(QMessageBox.Question)
       msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
       x = msg.exec_()
       if x == msg.Yes:
           User_Info.close()

   def update_button (self):
       self.window = QtWidgets.QMainWindow()
       self.ui = Ui_UpdatePage ()
       self.ui.setupUi(self.window)
       self.window.show()


if __name__ == "__main__":
   app = QtWidgets.QApplication(sys.argv)
   User_Info = QtWidgets.QMainWindow()
   ui = Ui_User_Info()
   ui.setupUi(User_Info)
   User_Info.show()
   sys.exit(app.exec_())

 

Ответ №1:

Всякий раз, когда вы сомневаетесь, я предлагаю вам попробовать запускать свои программы из терминала/приглашения, так как IDE имеют тенденцию скрывать полную обратную трассировку ошибок.

В этом случае это будет следующее:

 Traceback (most recent call last):
  File "/tmp/update_window.py", line 250, in exit_popup_message
    UpdatePage.close()
NameError: name 'UpdatePage' is not defined
 

Это вызвано двумя проблемами, одна из которых является строго программной, а другая-концептуальной.

При запуске update_window.py файла блок в if __name__ инструкции выполняется (потому __name__ что есть '__main__' ) и с UpdatePage тех пор существует, он работает без проблем. Обратите внимание, что UpdatePage это глобальный, и глобальных всегда следует избегать.
Вместо этого при запуске user_info.py файла выполняется только этот if __name__ файл, а другой игнорируется, а затем UpdatePage не существует, что вызывает исключение и приводит к сбою.

Другая проблема связана с тем, что вы редактируете файл генерируется pyuic и, как предупреждение в заголовке этих файлов четко сказано, эти файлы не будут изменены, если вы действительно знаете, что вы делаете, и одна из множества причин, препятствующих это (что является плохой практикой), что обычно приводит к недоразумениям о структуре объекта, так же, как в вашем случае. Эти файлы предназначены только для импорта, существует очень мало редких и специфических случаев, для которых их изменениеможно было бы подумать, но общее правило таково, что если вы знаете, что делаете, вы этого не сделаете.

Любая реализация для пользовательского интерфейса, построенного pyuic, должна выполняться путем создания подкласса соответствующего QWidget (в вашем случае QMainWindow) и использования созданного класса пользовательского интерфейса для создания пользовательского интерфейса поверх этого. Это не только упрощает и проясняет ситуацию, но также позволяет правильно обращаться к методам экземпляра, например close() , вместо того, чтобы пытаться делать что-то неправильно (например, обращаться к глобальному). Я не буду слишком углубляться в то, как все это работает, но концепция заключается в том , что при использовании вашего подхода self все эти методы относятся к экземпляру Ui_UpdatePage , в то время как при правильном подходе они относятся к фактическому объекту главного окна.

Итак, короче говоря, снова восстановите файлы пользовательского интерфейса с помощью pyuic (в следующем отрывке я сгенерировал файлы update_ui.py и user_ui.py , а затем реализовал методы в правильном подклассе:

update_window.py :

 from PyQt5 import QtCore, QtGui, QtWidgets
from update_ui import Ui_UpdatePage

class UpdatePage(QtWidgets.QMainWindow, Ui_UpdatePage):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

   def save_data (self):
        # ...

   def exit_popup_message (self):
       # ...
       if x == msg.Yes:
           self.close()
 

user_info.py :

 from PyQt5 import QtCore, QtGui, QtWidgets
from update_window import UpdatePage
from user_ui import Ui_User_Info

class UserInfo(QtWidgets.QMainWindow, Ui_User_Info):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

   def exit_popup_message(self):
        # ...
       if x == msg.Yes:
           self.close()

   def update_button(self):
       self.window = UpdatePage()
       self.window.show()

if __name__ == "__main__":
   app = QtWidgets.QApplication(sys.argv)
   userInfo = UserInfo()
   userInfo.show()
   sys.exit(app.exec_())
 

Чтобы узнать больше об использовании выше, ознакомьтесь с официальными рекомендациями по использованию Designer.

Комментарии:

1. большое вам спасибо за вашу полезную информацию, она помогла мне разобраться в проблеме

2. @OsamaABDELGAWAD, пожалуйста. Помните, что если ответ решает вашу проблему, вы должны установить его как принятый, нажав на галочку слева от него.