#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, пожалуйста. Помните, что если ответ решает вашу проблему, вы должны установить его как принятый, нажав на галочку слева от него.