将目录名传递给askopenfilename
我有三个函数。第一个函数叫 dirBut
,用户可以通过它选择一个文件夹,选择的文件夹路径会存储在 dirname
变量里,并且会更新一个输入框。第三个函数叫 dataInput
,用户可以通过它选择一个文件。我希望在用户选择文件时,打开的文件选择对话框能够默认在之前用户选择的文件夹,也就是 dirname
指定的地方。不过,我不太确定怎么把 dirname
传递给一个处理函数,以便在 askopenfilename
中使用,因为 askdirectory
是通过一个按钮来调用的。
def UserFileInput(self,status,name):
row = self.row
optionLabel = tk.Label(self)
optionLabel.grid(row=row, column=0, sticky='w')
optionLabel["text"] = name
text = status
var = tk.StringVar(root)
var.set(text)
w = tk.Entry(self, textvariable= var)
w.grid(row=row, column=1, sticky='ew')
self.row += 1
return w, var
def askdirectory(self):
dirname = tkFileDialog.askdirectory()
if dirname:
self.directoryEntry.delete(0, tk.END)
self.directoryEntry.insert(0, dirname)
def askfilename(self):
filename = tkFileDialog.askopenfilename(initialdir=dirname)
if filename:
self.dataInput.delete(0, tk.END)
self.dataInput.insert(0, filename)
currentDirectory = os.getcwd()
directory,var = self.UserFileInput(currentDirectory, "Directory")
self.directoryEntry = directory
dirBut = tk.Button(self, text='Select directory...', command = self.askdirectory)
dirBut.grid(row=self.row-1, column=2)
dataInput, var = self.UserFileInput("", "Data input")
self.dataInput = dataInput
fileBut = tk.Button(self, text='Select input file...', command = self.askfilename)
fileBut.grid(row=self.row-1, column=2)
1 个回答
5
假设 askdirectory
和 askfilename
是同一个类里的东西,试着把目录赋值给 self.dirname
,而不是 dirname
。这样的话,这个变量在这个类的任何地方都能被看到。
def askdirectory(self):
self.dirname = tkFileDialog.askdirectory()
if self.dirname:
self.directoryEntry.delete(0, tk.END)
self.directoryEntry.insert(0, self.dirname)
def askfilename(self):
filename = tkFileDialog.askopenfilename(initialdir=self.dirname)
if filename:
self.dataInput.delete(0, tk.END)
self.dataInput.insert(0, filename)