我正在使用PySide制作应用程序。我有一个目录树小部件,它应列出具有特定预定义深度的目录视图。这些文件夹大多来自服务器位置。我正在使用glob模块列出具有预定义深度的文件夹。我使用minidom模块使用此目录列表构建一个xml文档,稍后将使用该模块在树窗口小部件中构建项目。 但在某些时候我的应用程序冻结,结果是没有响应。这是我的代码。
import glob, os
from xml.dom import minidom
dirs = []
limit = 3
root = "S:/assets"
for i in range(1, limit + 1):
depth = []
[depth.append(
os.path.abspath(x)) for x in glob.glob(
root + "/*" * i)]
for each in depth:
if "." not in os.path.split(each)[-1]:
dirs.append(each)
dirs.sort()
def showDirectory(base, dirs):
dirDict = {}
doc = minidom.Document()
root = doc.createElement("root")
for each in dirs:
items = os.path.split(each)
if items[-1] == "":
continue
elm = doc.createElement("dir")
elm.appendChild(doc.createTextNode(items[-1]))
par = os.path.split(items[0])[-1]
dirDict[items[-1]] = elm
if os.path.abspath(items[0]) == os.path.abspath(base):
dirDict[items[-1]] = root.appendChild(elm)
else:
dirDict[par].appendChild(elm) # this line is the problem
doc.appendChild(root)
return doc
# test
with open("D:/test.xml", "w") as f:
showDirectory(root, dirs).writexml(f)
问题不在于我的应用,因为在许多其他场景中使用了相同的树窗口小部件。如果我评论我标记为有问题的行,一切正常。
我做错了吗?任何帮助都非常感谢。 感谢