【发布时间】:2018-03-17 16:10:50
【问题描述】:
我正在使用 PyQt 5.10 编写 Python 应用程序。
我似乎有某种错误/内存泄漏,因为当我在 MainWindow 上调用 close() 时,进程继续运行。经过一些研究和调试,我能够限制所谓的错误代码。
这是我的主要内容:
if __name__ == '__main__':
app = QApplication(sys.argv)
matteo = God()
matteo.runApp()
sys.exit(app.exec())
在这里你会找到God类的runApp函数:
def runApp(self):
self.painter = Painter()
self.dbManager = DBManager()
self.userInput = UserInput()
self.excelFile = ExcelFile()
self.painter.connectToClasses(self, ["god","db","ui"])
self.excelFile.connectToClasses(self, ["god",])
self.painter.drawMainWindow()
self.loadConf()
self.openDB(True)
if self.dbManager.error==None:
self.painter.drawSearchWidget()
else:
print("Closed.")
当应用程序无法找到配置文件时,该进程会继续运行,因此它会从头开始创建一个新文件,并要求用户选择他想要连接的数据库。这会提示一条错误消息 - 如果所选文件已损坏或格式不正确 - 我认为这可能是我的问题。
代码如下:
def checkError(self, classType):
if classType=="db":
error = self.dbManager.error
elif classType=="excel":
error = self.excelFile.error
if error!=None:
self.painter.drawError(classType)
self.userInput.error = self.painter.error.clickedButton()
self.userInput.error = self.painter.error.buttonRole(self.userInput.error)
if (self.userInput.error==1):
self.painter.mainWindow.close()
return 0
return 1
def drawError(self, classType):
if (classType=="db"):
title = "Database"
error = self.dbManager.error
otherButton = "Browse"
elif (classType=="excel"):
title = "Excel file"
error = self.excelFile.error
try:
self.setErrorText(False, error)
if error[0]:
if self.error.icon()!=3:
self.error.setIcon(3)
buttons = self.error.buttons()
for button in buttons:
if button.text()!="Quit":
button.hide()
button.deleteLater()
except AttributeError:
self.error = QMessageBox()
self.setErrorText(True, error)
if (error[0]):
self.error.setIcon(3)
else:
self.error.setIcon(2)
self.error.addButton(otherButton, self.error.AcceptRole)
self.error.addButton("Quit", self.error.RejectRole)
self.error.setWindowTitle(title)
self.error.exec()
如果用户单击错误窗口上的退出按钮,该函数将关闭主窗口并返回 0。其他函数返回并且应用程序在控制台上打印关闭。但这个过程还在继续。
【问题讨论】: