如何获取要打开的文件的文件名以及要在python中保存的文件的文件名

时间:2017-06-01 16:25:58

标签: python filedialog

我很抱歉标题不清楚,我真的不知道怎么说,但我想在python中创建一个文本编辑器。我想获取用户打开或保存在python中的文件的文件名:

def openFile():
    file = filedialog.askopenfile(parent=main_window, mode='rb', title='Select a file')
    contents = file.read()
    textArea.delete('1.0', END)
    textArea.insert('1.0', contents)
    file.close()

这里用户获得一个对话框来选择他想要打开的文件。但是如何获取他选择的文件的文件名呢?

def saveFileas():
    file = filedialog.asksaveasfile(mode='w')
    data = textArea.get('1.0', END+'-1c')
    file.write(data)
    file.close()

这里用户获得一个对话框来保存他的文件,并输入他们想要的名字。同样,我需要用户输入的名称。两者都使用默认的窗口opensave对话框。

这是我的所有代码:

from tkinter import Tk, scrolledtext, Menu, filedialog, END

main_window = Tk(className = " Text Editor")
textArea = scrolledtext.ScrolledText(main_window, width=100, height=80)

# def newFile():
def openFile():
    file = filedialog.askopenfile(parent=main_window, mode='rb', title='Select a file')
    contents = file.read()
    textArea.delete('1.0', END)
    textArea.insert('1.0', contents)
    file.close()


def saveFileas():
    file = filedialog.asksaveasfile(mode='w')
    data = textArea.get('1.0', END+'-1c')
    file.write(data)
    file.close()

def saveFile():
    content = textArea.get('1.0', END+'-1c')
    if content:
        print("There is content")
    else:
        print("There is no content")


#Menu options
menu = Menu(main_window)
main_window.config(menu=menu)
fileMenu = Menu(menu)
menu.add_cascade(label="File", menu=fileMenu)
fileMenu.add_command(label="New")
fileMenu.add_command(label="Open", command=openFile)
fileMenu.add_command(label="Save As", command=saveFileas)
fileMenu.add_command(label="Save", command=saveFile)
fileMenu.add_separator()
fileMenu.add_command(label="Print")
fileMenu.add_separator()
fileMenu.add_command(label="Exit")

textArea.pack()

main_window.mainloop()

3 个答案:

答案 0 :(得分:1)

这样的东西应该用于获取文件名。

  from  tkinter import filedialog
  root = Tk()
  root.filename =  filedialog.askopenfilename(initialdir = "Path Where the dialog should open first",title = 
  "Title of the dialog",filetypes = (("jpeg files","*.jpg"),("all files","*.*")))
  print (root.filename)
  root.withdraw()

答案 1 :(得分:0)

documentation似乎暗示askopenfile返回文件名(如果已选中)或空字符串(如果用户单击取消)。换句话说,它是一个字符串,而不是文件指针。您需要先打开文件。

答案 2 :(得分:-1)

askopenfile返回文件对象的句柄,就像Brian Oakley说你可以得到文件名一样:

filePath = filedialog.askopenfile(parent=main_window, mode='rb', title='Select a file')
fileName = filePath.name.split('/').pop()