python - 如何将 python 脚本连接到 PyQt5 中的按钮?
问题描述
我试图为桌面应用程序创建一个 GUI,并且从一个窗口我想将其中一个按钮连接到另一个脚本,实际上它工作正常,除了负责在 update_window.py 中处理第二个窗口“exit_popup_message”的函数,所以我成功运行第一个文件并单击“更新用户”按钮,它成功运行第二个窗口,但是每当我在第二个窗口中单击退出时,它就会崩溃并出现此错误:
进程以退出代码 -1073740791 (0xC0000409) 结束
更新窗口.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_())
用户信息.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_())
解决方案
每当有疑问时,我建议您尝试从终端/提示符运行您的程序,因为 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__
is '__main__'
)并且从那时UpdatePage
起存在,它可以正常工作。请注意,这UpdatePage
是一个全局变量,应始终避免使用全局变量。
相反,当您运行该user_info.py
文件时,只会执行该文件,而if __name__
忽略另一个文件,然后UpdatePage
不存在,引发异常并导致崩溃。
另一个问题与您正在编辑生成的文件有关,pyuic
并且正如这些文件标题中的警告明确指出的那样,除非您真的知道自己在做什么,否则不应修改这些文件,并且其中之一阻止这种做法(这被认为是不好的做法)的许多原因是它通常会导致对对象结构的误解,就像您的情况一样。这些文件仅用于导入,很少有特殊情况可以考虑对其进行修改,但一般规则是,如果您知道自己在做什么,就不会这样做。
pyuic 构建的 UI 的任何实现都应该通过继承其相应的 QWidget(在您的情况下为 QMainWindow)并使用生成的 UI 类在其上构建 ui 来完成。这不仅简化和澄清了事情,而且还允许正确访问实例方法,例如close()
,而不是尝试以错误的方式做事(如访问全局)。我不会深入探讨这一切是如何工作的,但概念是使用您的方法,self
在所有这些方法中,都指的是 的实例Ui_UpdatePage
,而在正确的方法中,它指的是实际的主窗口对象。
所以,简而言之,用 pyuic 重新生成你的 ui 文件(在下面的摘录中,我生成了文件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的官方指南。
推荐阅读
- mockito - 使用 Mockito 返回空连接来测试 Solace 生产者
- mobile - Windev手机,地址到坐标
- android - 用于 RFID 卡 UID 仿真的应用程序?
- mysql - 错误:列“字段”必须出现在 GROUP BY 子句中或在聚合函数中使用
- angular - Angular FormArray - 重复值验证器
- spring - Spring Batch,在 writer() 中访问 StepExecution
- domain-driven-design - 聚合边界
- javascript - 无法使用 Node.js 解析 Firebase 的快照
- ios - 不支持 iOS 设备 FT232R USB 芯片
- html - 不让任何东西与绝对 div 重叠