赞
踩
目录
2.2 调用tkinter.filedialog中的函数进行图形化文件操作
一个生产力软件,图形化的文件存取操作往往是其必备的功能。通过图形化文件存取操作,用户能够方便快捷地进行文件的打开或是文件的保存。
以VisualStudio2022为例,我们会在其顶端导航栏中看到如下的按钮控件。
点击文件按钮中的”打开“或是“新建”,都能够调出系统自带的文件资源管理器,用户能够在系统的图形化文件管理器中进行舒适快捷的文件存取操作,而不是在命令行中进行较为“抽象“和繁琐的操作。
那么,如果利用python进行编程,我们如何实现上述的功能呢?下面,笔者将详细介绍我们本文的主角---tkinter.filedialog , 利用tkinker图形化编程库,我们能够通过非常简单的方式将这一切实现。
下面是tkinter.filedialog中较为实用的一些图形化文件资源管理器调度方法
tkinter.filedialog.asksaveasfilename()#返回要保存的文件名
tkinter.filedialog.asksaveasfile()#创建文件,返回文件流对象
tkinter.filedialog.askopenfilename()#返回要打开的文件名
tkinter.filedialog.askopenfile()#返回要打开的文件流对象
tkinter.filedialog.askdirectory()#返回目录名
tkinter.filedialog.askopenfilenames()#可以返回多个文件名
tkinter.filedialog.askopenfiles()#返回多个文件流对象
这些函数的参数大抵相同,笔者将其中较为常用的参数整理到了下表中
参数名 | 功能 |
defaultextension | 默认文件的扩展名 |
title | 决定图形化窗口的标题 |
initialdir | 对话框中默认的路径 |
initialfile | 对话框中初始化显示的文件名 |
parent | tkinter父对话框(由哪个窗口弹出就在哪个上端) |
filetypes | [(label1, pattern1), (label2, pattern2), …] 设置文件类型下拉菜单里的可选文件类型 |
以
tkinter.filedialog.asksaveasfilename(title="save your file", initialdir="save_file", initialfile = "test",filetypes=[["文本文件",".txt .docx .doc"],["Excel", ".xls .xlsx"]], defaultextension=".tif")
为例,会实现下图的效果:
- import tkinter as tk
- import tkinter.filedialog
- import pyautogui #提升画面质量
- import os
其中,pyautogui可以用于提升系统文件资源管理器的dpi,增强视觉效果。如果没有引用这个模块的话,界面会稍显模糊。
隐藏窗口能够与图形化其他的图形界面完美融入,如果我们用pygame制作游戏,想要在某个节点保存游戏,如果像本文中这样调用tkinter而不隐藏tkinter界面的话,就会凭空出现一个空白界面,产生割裂感。当然,这个这是笔者推荐的做法罢了,读者可以自行选择。
- root = tk.Tk()
- root.withdraw()
接下来直接调用第1节所述的方法即可,笔者编写了一个测试用例,方便读者们进行快速的测试和学习,完整代码如下。
- '''
- author ZevieZ
- more interesting contents
- @https://blog.csdn.net/weixin_50233916?type=blog
- '''
-
- import tkinter.filedialog
- import pyautogui
- import tkinter as tk
- import os
-
- #测试用文件夹的相对路径(相对此脚本文件所在位置的路径),用于测试tkinker文件资源管理器调度函数
- SAVE_FILES_PATH = "save_file"
-
- def save_file(title="save your file", initialdir="save_file", initialfile = "test",filetypes=[["文本文件",".txt .docx .doc"],["Excel", ".xls .xlsx"]], defaultextension=".tif"):
- '''
- 保存文件
- '''
- #从系统的文件资源管理器中获取想要的文件保存路径
- get_save_path = tkinter.filedialog.asksaveasfilename(title = title, initialdir = initialdir,initialfile = initialfile,filetypes = filetypes, defaultextension = defaultextension)
- print("获取的文件保存路径为-> ",get_save_path)
-
- #后续的保存文件操作,python IO流,这里以txt文件为例作为演示
- text = input("输入您想要保存的内容:") #想要写入并保存的文本
- newfile = open(get_save_path,"w+",encoding="utf-8")
- newfile.write(text)
- print("保存成功")
- print()
- newfile.close()
- pass
-
- def open_file(title="select your file"):
- '''
- 保存文件
- '''
- #从系统的文件资源管理器中获取想要的文件保存路径
- get_open_path = tkinter.filedialog.askopenfilename(title = title)
- print("选择的文件路径为-> ",get_open_path)
-
- #后续的保存文件操作,python IO流,这里以txt文件为例作为演示
- newfile = open(get_open_path,"r",encoding="utf-8")
- pcontent = newfile.read()
- print("此文件的内容为->\n",pcontent)
- print()
- newfile.close()
- pass
-
- def test_func():
- '''
- 轮流测试各个实用的tkinker文件资源管理器调动函数
- '''
- print("asksaveasfilename")
- path =tkinter.filedialog.asksaveasfilename()#返回文件名
- print(path)
-
- print("asksaveasfile")
- path =tkinter.filedialog.asksaveasfile()#会创建文件
- print(path)
-
- print("askopenfilename")
- path =tkinter.filedialog.askopenfilename()#返回文件名
- print(path)
-
- print("askopenfile")
- path =tkinter.filedialog.askopenfile()#返回文件流对象
- print(path)
-
- print("askdirectory")
- path =tkinter.filedialog.askdirectory()#返回目录名
- print(path)
-
- print("askopenfilenames")
- path =tkinter.filedialog.askopenfilenames()#可以返回多个文件名
- print(path)
-
- print("askopenfiles")
- path =tkinter.filedialog.askopenfiles()#多个文件流对象
- print(path)
-
-
- if __name__ == "__main__":
-
- #实例化tkinker窗口
- root = tk.Tk()
- root.withdraw()
-
- rewrite_menu = True
-
- #创建测试用文件夹
- if (os.path.exists(SAVE_FILES_PATH) == False):
- os.mkdir(SAVE_FILES_PATH)
- while(1):
-
- #打印菜单
- if rewrite_menu:
- print("----------------------------------")
- print("1-> 保存文件(测试asksaveasfilename)")
- print("2-> 打开文件(测试askopenfilename)")
- print("3-> 轮流测试各个实用的tkinker文件资源管理器调动函数")
- print("4-> 退出")
-
- order = input() #获取输入指令
-
- #处理指令
- rewrite_menu = True
- if (order == "1"):
- save_file()
- elif (order == "2"):
- open_file()
- elif (order == "3"):
- test_func()
- elif (order == "4"):
- break
- else:
- print("输入错误\n")
- rewrite_menu = False
运行之后,能够在目录下看到一个名为save_file的文件夹,里面可以存放用户在测试过程中保存的文件。
读者可以根据菜单的提示,选择不同的测试内容,并在命令行中看到输出结果。当然,也可以查看save_file中文件的状态来进行验证。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。