Tkinter FileDialog.askopenfilename在已经打开的文件上失败

时间:2017-01-17 19:09:38

标签: python tkinter

我找不到使用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#的人。

0 个答案:

没有答案