Python tkinter.filedialog调用系统文件资源管理器实现各类图形化文件操作

本文详细介绍了如何使用Python的tkinter库中的filedialog模块实现图形化文件操作,包括打开、保存文件及目录选择,提供示例代码供读者实践。
部署运行你感兴趣的模型镜像

目录

前言

1.tkinter.filedialog中的方法

2.测试案例

2.1创建tkinter窗口

2.1.1 导入模块

2.1.2 创建可以隐藏的tkinter窗口

2.2 调用tkinter.filedialog中的函数进行图形化文件操作


前言

       一个生产力软件,图形化的文件存取操作往往是其必备的功能。通过图形化文件存取操作,用户能够方便快捷地进行文件的打开或是文件的保存。

       以VisualStudio2022为例,我们会在其顶端导航栏中看到如下的按钮控件。

        点击文件按钮中的”打开“或是“新建”,都能够调出系统自带的文件资源管理器,用户能够在系统的图形化文件管理器中进行舒适快捷的文件存取操作,而不是在命令行中进行较为“抽象“和繁琐的操作。

       那么,如果利用python进行编程,我们如何实现上述的功能呢?下面,笔者将详细介绍我们本文的主角---tkinter.filedialog , 利用tkinker图形化编程库,我们能够通过非常简单的方式将这一切实现。

1.tkinter.filedialog中的方法

        下面是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")

        为例,会实现下图的效果:

2.测试案例

2.1创建tkinter窗口

2.1.1 导入模块

import tkinter as tk
import tkinter.filedialog
import pyautogui #提升画面质量
import os

         其中,pyautogui可以用于提升系统文件资源管理器的dpi,增强视觉效果。如果没有引用这个模块的话,界面会稍显模糊。

2.1.2 创建可以隐藏的tkinter窗口

        隐藏窗口能够与图形化其他的图形界面完美融入,如果我们用pygame制作游戏,想要在某个节点保存游戏,如果像本文中这样调用tkinter而不隐藏tkinter界面的话,就会凭空出现一个空白界面,产生割裂感。当然,这个这是笔者推荐的做法罢了,读者可以自行选择。

root = tk.Tk()
root.withdraw()

2.2 调用tkinter.filedialog中的函数进行图形化文件操作

        接下来直接调用第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中文件的状态来进行验证。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZevieZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值