python tkinter中的菜单:将文件保存到新目录

时间:2019-07-12 11:16:28

标签: python file tkinter

我的python tkinter GUI程序在执行一些操作后正在编写文本文件。我想添加一个导出菜单,以便用户可以将此文件保存到USB记忆棒或另一个目录中。 (我知道我们可以进行普通复制粘贴)。但我想添加此导出菜单。我想要实现的是,当用户单击此导出菜单时,应打开当前目录,并且用户可以选择文件(已经创建并存在于当前目录中的myData.txt),现在用户可以选择新目录,并将myData.txt保存在新目录中。 (它也应在Linux平台上工作)

#My gui app creates a text file myData.txt in my current folder when I run the program. 

from tkinter import *
from tkinter import messagebox
import sys

def Export_File():
    #what do i need here???


windows = Tk()
menubar = Menu(windows)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Export", command =Export_File )

filemenu.add_command(label="Exit", command=Exit_File)
menubar.add_cascade(label="File", menu=filemenu)
windows.configure(menu=menubar)


windows.mainloop()

3 个答案:

答案 0 :(得分:0)

首先,您需要再导入2件事

import os
from tkinter import filedialog

接下来,将变量分配给用户选择的目录,然后使用os模块更改为该目录

def Export_File():
    dir_name = filedialog.askdirectory() # asks user to choose a directory
    os. chdir(dir_name) # changes your current directory

要检查当前目录,您可以随时

curr_directory = os.getcwd()
print(curr_directory)

答案 1 :(得分:0)

askdirectory()中使用tkinter.filedialog。打开一个普通文件对话框窗口,并以字符串形式返回所选目录。

from tkinter.filedialog import askdirectory
file = askdirectory(initialdir='/', title='Select File')

然后您应该能够使用write函数将其保存在其他位置:

def Export_File():
    file = open('myData.txt', 'w')
    saveHere = askdirectory(initialdir='/', title='Select File')

    file.write(os.path.join(saveHere, 'myData.txt'))

答案 2 :(得分:0)

如果您不介意使用异常模块,则可以继续阅读解决方案。 要复制文件,请使用 tempfile 模块。 我将提供用于移动文件的代码以及代码的说明。

  

tempfile.mkstemp(suffix ='',prefix ='tmp',dir = None,text = False)-创建新文件

以最安全的方式创建一个临时文件。假设平台正确实现了os.open()的os.O_EXCL标志,则文件的创建中没有竞争条件。该文件只能由创建用户ID来读写。如果平台使用权限位指示文件是否可执行,则该文件无人可执行。文件描述符不被子进程继承。 与TemporaryFile()不同,mkstemp()的用户负责在完成临时文件后将其删除。 如果指定了后缀,则文件名将以该后缀结尾,否则将没有后缀。 mkstemp()在文件名和后缀之间不加点;如果需要一个,请将其放在后缀的开头。 如果指定了前缀,则文件名将以该前缀开头;否则,将使用默认前缀。 如果指定了dir,则将在该目录中创建文件;否则,将使用默认目录。从与平台相关的列表中选择默认目录,但是应用程序的用户可以通过设置TMPDIR,TEMP或TMP环境变量来控制目录位置。因此,不能保证生成的文件名将具有任何不错的属性,例如,通过os.popen()传递给外部命令时不需要引用。 如果指定了文本,则指示是以二进制模式(默认)还是文本模式打开文件。在某些平台上,这没有区别。 mkstemp()返回一个元组,该元组包含打开文件的操作系统级句柄(由os.open()返回)和该文件的绝对路径名,按该顺序。

当然,您必须在其中插入文件内容。

with open(file) as file:
    for line in file:
        new = open(file, 'a')
        new.write(line)

您执行的顺序是创建新文件,并添加文本。 您可能想知道我从哪里获取代码和文档,所以我告诉您。 我得到了代码和文档here