提问人:Radu Mitroi 提问时间:10/4/2023 更新时间:10/5/2023 访问量:32
如何记住“askopenfilenames”和“askdirectory”的路径?
How can I remember the paths of 'askopenfilenames' & 'askdirectory'?
问:
我正在为使用 Python 和 Tkinter 的 Substance Designer 编写一个自定义脚本。它的主要思想是,一旦用户按下按钮,它就会打开一个窗口,要求你选择你需要的文件 -> [处理事情发生] ->最后打开另一个窗口,询问你要保存处理的文件的目录。
我面临的问题是,每当我想重复此过程时,第一个窗口(要求我选择文件的窗口)会在我去过的最后一个地方(我将文件保存到的目录)打开。 当第二个窗口弹出时,也会发生同样的事情,它会在我去过的最后一个地方(我从中选择文件的目录)打开。
我想发生的是,每个窗口弹出窗口始终打开到发生特定功能的路径。 因此,每当重复此过程时,第一个窗口应直接打开,其中包含用户从中选择文件的路径,第二个窗口应直接打开,其中包含用户上次保存这些文件的路径。
我现在处理这些函数的方式非常简单,通过使用:
fileNames = fd.askopenfilenames(parent=root, title='Choose your files')
和
folder_selected = fd.askdirectory()
其中 fileNames 是要求您选择文件的窗口,folder_selected 是用户希望将这些已处理的文件保存到的位置。
关于如何为这些函数实现某种“内存”的东西,并让脚本执行我上面解释的任何事情的任何想法?
答:
您可以使用 initialdir
参数来设置 的初始目录。filedialog
将第一个打开的目录保存到一个变量中,将第二个打开的目录保存到另一个变量中,并在参数中相应地使用这些目录。filedialog
filedialog
initialdir
您可以使用以下模块:os
os.path.dirname("Your Path")
编辑
您可以使用类并根据需要设置实例/类变量。下面是一个简单的示例:
import tkinter as tk
from tkinter import filedialog
import os
class FileSelectorApp(tk.Tk):
def __init__(self):
super().__init__()
self.src_files = None
self.dst_files = None
self.title("File Selector")
tk.Button(self, text="Open Files", command=self.open_files).pack()
tk.Button(self, text="Open Directory", command=self.open_directory).pack()
def open_files(self):
files = filedialog.askopenfiles(
title="Select Files", initialdir=self.src_files,
filetypes=[("All Files", "*.*")]
)
if files:
self.src_files = os.path.dirname(files[0].name)
def open_directory(self):
directory = filedialog.askdirectory(initialdir=self.dst_files,
title="Select Directory")
if directory:
self.dst_files = os.path.dirname(directory)
if __name__ == "__main__":
app = FileSelectorApp()
app.mainloop()
还可以创建一个类来实现该行为。一个对象,它获取所需的函数并在每次调用该函数时管理目录变量,而不是在每次要打开 .fd
fd
评论
initialdir