我找不到使用Tkinter tkFileDialog.askopenfilename
/ Open()
方法获取已打开文件的文件名的方法。至少在Windows 7上。
只需返回选中的文件名,但当我选择“已打开”的文件时,我会弹出"This file is in use"
。获取文件名的任何搜索似乎总是指向使用FileDialog
。
似乎有同样的问题,但在这里使用c#: Open File Which is already open in window explorer
是否有任何未列出的方法可用于达到此目的?在Windows 7上已打开的文件上没有失败的文件选择弹出窗口?
Python 2.7.11 Windows 7_64
选择对话框:
opts = {}
opts['title'] = 'Select file.'
filename = tkFileDialog.Open(**opts).show()
或
filename = tkFileDialog.askopenfilename(**opts)
与askopenfilename
来电Open().show()
相同,后者又称command = "tk_getOpenFile"
。
搜索tk_getOpenFile
没有显示任何内容来覆盖此行为。
这里的任何指示都会非常感激。
更新
为了不重申在这里所做的一切都是Tkinter 8.5 FileDialog的分解。
def askopenfile(mode = "r", **options):
"Ask for a filename to open, and returned the opened file"
filename = Open(**options).show()
if filename:
return open(filename, mode)
return None
def askopenfilename(**options):
"Ask for a filename to open"
return Open(**options).show()
两者都调用Open类,但是askopenfile跟随一个open(文件),在这里:
class Open(_Dialog):
"Ask for a filename to open"
command = "tk_getOpenFile"
def _fixresult(self, widget, result):
if isinstance(result, tuple):
# multiple results:
result = tuple([getattr(r, "string", r) for r in result])
if result:
import os
path, file = os.path.split(result[0])
self.options["initialdir"] = path
# don't set initialfile or filename, as we have multiple of these
return result
if not widget.tk.wantobjects() and "multiple" in self.options:
# Need to split result explicitly
return self._fixresult(widget, widget.tk.splitlist(result))
return _Dialog._fixresult(self, widget, result)
UPDATE2(answerish):
似乎windows trc / tk tk_getOpenFile最终调用
OPENFILENAME ofn;
如果文件正在使用中,显然不能返回文件名。 然而,要找到原因,但无论如何。
在我的情况下,需要引用正在运行的QuickBooks文件,使用askopenfilename()将无法正常工作。
上面的链接再次引用具有相同问题但使用c#的人。