我的gui目前有一个组合框,可以选择四个不同的文件位置。选择该目录中的每个文件后,它将显示在列表框中:
def ComboBox(self, event):
current = self.buttonChoice.current()
if (current == 0):
self.lb.delete(0, END)
for i in range(0, length1):
self.lb.insert(END, self.files1[i])
elif (current == 1):
self.lb.delete(0, END)
sys.path.insert(0, sys.path[0]+ "\\folder1")
for i in range(0, length2):
self.lb.insert(END, self.files2[i])
elif (current == 2):
self.lb.delete(0, END)
sys.path.insert(0, sys.path[0]+ "\\folder2")
for i in range(0, length3):
self.lb.insert(END, self.files2[i])
elif (current == 3):
self.lb.delete(0, END)
sys.path.insert(0, sys.path[0]+ "\\folder3")
for i in range(0, length4):
self.lb.insert(END, self.files4[i])
但是我的路径不是最佳的,因为该函数没有返回到父目录而是卡在该文件夹中(例如,如果current == 1,则目录将位于... \ folder1中)。为了实现这一点,我需要在每个语句的末尾向下移动一个目录。我看了相关的问题并遇到了os.chdir('..')
。出于某种原因,我无法实现这一点。关于如何在每个语句结束时向下移动一个目录的任何想法。
答案 0 :(得分:1)
这个怎么样?
example_dir = r'C:\Users\****\Desktop\PythonScripts\ResidualCreation'
def move_back_dir(a_dir, steps=1):
return '\\'.join(a_dir.split('\\')[:-steps])
print(move_back_dir(example_dir)) # -> C:\Users\****\Desktop\PythonScripts
print(move_back_dir(example_dir, 2)) # -> C:\Users\****\Desktop
或者按照评论中的建议以递归的方式实现os.path.dirname()
,如下所示:
def move_back_dir(a_dir, steps=1):
for i in range(steps):
a_dir = os.path.dirname(a_dir)
return a_dir
print(move_back_dir(example_dir)) # -> C:\Users\****\Desktop\PythonScripts
print(move_back_dir(example_dir, 2)) # -> C:\Users\****\Desktop
如果不需要设置要返回的文件夹数量(上例中为step
),只需执行os.path.dirname(filename)
答案 1 :(得分:0)
确实,您应该使用os.chdir
而不是sys.path.insert
。
为了给你一个完整的答案,你需要看到你班上的其他人。更具体地说,必须知道self.lb
和self.files
中的内容以及填充它的逻辑。