如何使用Python / tkinter阻止打开已经打开的文件

时间:2015-05-20 04:39:48

标签: python tkinter

抱歉,如果这是一个愚蠢的问题......但我是学习Python的新手,这是一个家庭作业问题......

所以我想阻止人们使用tkinter重新打开已经加载的文件 - 并在尝试打开文件时弹出错误对话框。

到目前为止,我已经得到了这个:

from tkinter import filedialog
from tkinter import messagebox

def open_file(self):
    openfiles=[]
    filename = filedialog.askopenfilename(filetypes=[("allfiles","*.txt")])

    if filename not in openfiles:
        openfiles.append(filename)
        self._filename = filename
        functiontoloadfile(filename)

    else:
        messagebox.showerror(filename + "is already open")

2 个答案:

答案 0 :(得分:1)

假设open_files()是一个不属于类的函数,您可以像这样保留openfiles列表:

openfiles=[]
def open_file(self):
    filename = filedialog.askopenfilename(filetypes=[("allfiles","*.txt")])

    if filename not in openfiles:
        openfiles.append(filename)
        functiontoloadfile(filename)
    else:
        messagebox.showerror(filename + "is already open")

这将使openfiles列表保持在open_file函数的多个调用之间。当然,您需要确保在文件关闭时从该列表中删除,这可能会让您头疼不已。

更好的方法可能是,您可以检测哪些UI元素正在显示文件,并根据这些UI元素的存在来推断文件是否打开。

答案 1 :(得分:0)

在python中,如果你尝试打开一个已打开的文件,你可能会出现如下错误:

try:
    myfile = open("myfile.csv", "r+") # or "a+", whatever you need
except IOError:
    print "Is already open"