我的 Python 脚本中导致无限循环的错误是什么



我有一个 python 类,它创建了一个包含

  • 编辑线
  • "打开"按钮
  • "取消"按钮

其中,编辑行将获取作为文件夹路径的用户输入。

问题是一旦我运行脚本,它就会进入无限循环。

法典:

'''
1- import the libraries from the converted file
2- import the converted file 
'''
from PyQt5 import QtCore, QtGui, QtWidgets
import pathmsgbox 
import os 
import pathlib
class path_window(pathmsgbox.Ui_PathMSGbox):

def __init__(self,windowObject ):
self.windowObject = windowObject
self.setupUi(windowObject)
self.checkPath(self.pathEditLine.text())
self.windowObject.show()

def checkPath(self, pathOfFile):
folder = self.pathEditLine.text()
while os.path.exists(folder) != True:
print("the specified path not exist")
folder = self.pathEditLine.text()
return folder
'''
get the userInput  from the EditLine
'''   
'''     
def getText(self):
inputUser = self.pathEditLine.text()
print(inputUser)
'''
'''
function that exit from the system after clicking "cancel"
'''
def exit():
sys.exit()
'''
define the methods to run only if this is the main module deing run
the name take __main__ string only if its the main running script and not imported 
nor being a child process
'''
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
PathMSGbox = QtWidgets.QWidget()
pathUi = path_window(PathMSGbox)
pathUi.pathCancelBtn.clicked.connect(exit)
sys.exit(app.exec_())

这里的问题是你在类初始化中调用checkPath()

checkPath()读取路径一次,然后开始评估该路径是否"永久"有效。这种while循环运行甚至可能阻止软件能够有效地再次读取self.pathEditLine的文本。

通常最好将每个函数连接到一个事件:

  • 按下按钮时检查文件夹是否存在
  • 检查文本更改时文件夹是否存在
  • 当用户按回车键时检查文件夹是否存在

要执行其中任何操作,您必须将以下事件之一连接到函数:

按钮事件:

self.btnMyNewButton.clicked.connect(checkPath)

文本更改事件:

self.pathEditLine.textChanged.connect(checkPath)

输入按钮事件:

self.pathEditLine.returnPressed.connect(checkPath)

这意味着您必须将前面的一行替换为在初始化中调用checkPath()函数的行:

def __init__(self,windowObject ):
self.windowObject = windowObject
self.setupUi(windowObject)
self.pathEditLine.textChanged.connect(checkPath)
self.windowObject.show()

您还必须从checkPath(self, checkPath)中删除pathOfFile参数,因为您没有使用它。

由于我们为checkPath()函数决定了不同的行为,我们不再需要while循环:每次发生event时,我们都会读取用户输入,评估用户输入,如果我们喜欢,则返回用户输入,或者如果我们不喜欢,则返回False

def checkPath(self):
folder = str(self.pathEditLine.text())
if os.path.exists(folder):
print '%s is a valid folder' % folder
return folder
else:
print '%s is NOT a valid folder' % folder
return False

相关内容

  • 没有找到相关文章

最新更新