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.