简体   繁体   中英

How to connect python script to a button in PyQt5?

I was trying to create a GUI for a desktop application and from one window I wanted to connect one of the buttons to another script, actually it is working fine except the function which responsible of clothing the second window "exit_popup_message" in update_window.py so I run the first file successfully and click on "update user" button it runs the second window successfully but whenever I click on exit in the second window it crashes and gives this error:

Process finished with exit code -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 & 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 & 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_())

Whenever in doubt, I suggest you to try to run your programs from a terminal/prompt, as IDEs have the tendency of hiding the full traceback of errors.

In this case, it will be the following:

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

This is caused by two problems, one strictly programmatical, the other being conceptual.

When you run the update_window.py file, the block in the if __name__ statement is executed (because __name__ is '__main__' ) and since UpdatePage then exists, it works without problems. Note that UpdatePage is a global , and globals should always be avoided.
When you run the user_info.py file, instead, only that file's if __name__ is executed, and the other one is ignored, then UpdatePage doesn't exist, raising the exception and resulting in a crash.

The other problem is related to the fact that you're editing a file generated with pyuic and, as the warning in the header of those files clearly states, those files should never be modified unless you really know what you're doing, and one of the many reasons for discouraging this (which is considered bad practice) is that it usually leads to misunderstandings about object structure, just like in your case. Those files are only intended to be imported , there are very few, rare and specific cases for which modifying them could be considered, but the general rule is that if you know what you're doing, you will not do it.

Any implementation for a pyuic built UI should be done by subclassing its corresponding QWidget (QMainWindow, in your case) and using the generated UI class to build the ui on top of that. Not only this simplifies and clarifies things, but it also allows to properly access the instance methods, such as close() , instead of trying to do things in the wrong way (like accessing a global). I'll not go too deep into how all of this work, but the concept is that using your approach, the self in all those methods refers to an instance of Ui_UpdatePage , while in the correct approach it refers to the actual main window object.

So, in short, regenerate again your ui files with pyuic (in the following excerpt I generated the files update_ui.py and user_ui.py , and then implement the methods to the correct subclass:

update_window.py :

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

class UpdatePage():
    def __init__(self):
        super().__init__()
        

   def save_data (self):
        # ...

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

user_info.py :

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

class UserInfo():
    def __init__(self):
        super().__init__()
        self.setupUi(self)

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

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

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

To know more on the above usage, read the official guidelines about using Designer .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM