Python中使用tkFileDialog实现文件选择、保存和路径选择


Posted in Python onMay 20, 2022

使用tkFileDialog实现文件选择、保存和路径选择

概述

看了下Tkinter的文档,对于Pop-up dialog有三类,现在用到的是tkFileDialog

tkFileDialog有三种形式:

  • 一个是:askopenfilename(option=value, …) 这个是”打开”对话框
  • 一个是:asksaveasfilename(option=value, …) 这个是另存为对话框
  • 另一个是:askdirectory()这个是路径选择对话框

option参数如下:

  • defaultextension = s 默认文件的扩展名
  • filetypes = [(label1, pattern1), (label2, pattern2), …] 设置文件类型下拉菜单里的的选项
  • initialdir = D 对话框中默认的路径
  • initialfile = F 对话框中初始化显示的文件名
  • parent = W 父对话框(由哪个窗口弹出就在哪个上端)
  • title = T 弹出对话框的标题

如果选中文件的话,确认后会显示文件的完整路径,否则单击取消的话会返回空字符串

示例

#coding=UTF-8    
import Tkinter, Tkconstants, tkFileDialog  
class TkFileDialogExample(Tkinter.Frame):  

    def __init__(self, root):  
        Tkinter.Frame.__init__(self, root)  
        # options for buttons  
        button_opt = {'fill': Tkconstants.BOTH, 'padx': 5, 'pady': 5}  

        # define buttons  
        Tkinter.Button(self, text='askopenfile', command=self.askopenfile).pack(**button_opt)  
        Tkinter.Button(self, text='askopenfilename', command=self.askopenfilename).pack(**button_opt)  
        Tkinter.Button(self, text='asksaveasfile', command=self.asksaveasfile).pack(**button_opt)  
        Tkinter.Button(self, text='asksaveasfilename', command=self.asksaveasfilename).pack(**button_opt)  
        Tkinter.Button(self, text='askdirectory', command=self.askdirectory).pack(**button_opt)  

        # define options for opening or saving a file  
        self.file_opt = options = {}  
        options['defaultextension'] = '.txt'  
        options['filetypes'] = [('all files', '.*'), ('text files', '.txt')]  
        options['initialdir'] = 'C:\\'  
        options['initialfile'] = 'myfile.txt'  
        options['parent'] = root  
        options['title'] = 'This is a title'  

        # This is only available on the Macintosh, and only when Navigation Services are installed.  
        #options['message'] = 'message'  

        # if you use the multiple file version of the module functions this option is set automatically.  
        #options['multiple'] = 1  

        # defining options for opening a directory  
        self.dir_opt = options = {}  
        options['initialdir'] = 'C:\\'  
        options['mustexist'] = False  
        options['parent'] = root  
        options['title'] = 'This is a title'  

    def askopenfile(self):  

        """Returns an opened file in read mode."""  

        return tkFileDialog.askopenfile(mode='r', **self.file_opt)  

    def askopenfilename(self):  

        """Returns an opened file in read mode. 
        This time the dialog just returns a filename and the file is opened by your own code. 
        """  

        # get filename  
        filename = tkFileDialog.askopenfilename(**self.file_opt)  

        # open file on your own  
        if filename:  
            return open(filename, 'r')  

    def asksaveasfile(self):  

        """Returns an opened file in write mode."""  

        return tkFileDialog.asksaveasfile(mode='w', **self.file_opt)  

    def asksaveasfilename(self):  

        """Returns an opened file in write mode. 
        This time the dialog just returns a filename and the file is opened by your own code. 
        """  

        # get filename  
        filename = tkFileDialog.asksaveasfilename(**self.file_opt)  

        # open file on your own  
        if filename:  
            return open(filename, 'w')  

    def askdirectory(self):  

        """Returns a selected directoryname."""  

        return tkFileDialog.askdirectory(**self.dir_opt)  

if __name__ == '__main__':  
    root = Tkinter.Tk()  
    TkFileDialogExample(root).pack()  
    root.mainloop()

ImportError: No module named 'tkFileDialog'问题

原因

python2和pyton3的版本问题。python3之后的版本自带有tkinter.

验证

  • import _tkinter
  • import tkinter
  • tkinter._test()

在python3中输入以上命令进行验证。

解决方法

Python2中应该写成  

from tkFileDialog import askdirectory

python3中应该写成  

from tkinter.filedialog import askdirectory

tkColorChooser ------------>tkinter.colorchooser
tkCommonDialog --------------->tkinter.commondialog   

其他的可以类推。


Tags in this post...

Python 相关文章推荐
python学习之matplotlib绘制散点图实例
Dec 09 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
nohup后台启动Python脚本,log不刷新的解决方法
Jan 14 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
Prometheus开发中间件Exporter过程详解
Nov 30 Python
python之json文件转xml文件案例讲解
Aug 07 Python
Python学习之迭代器详解
Apr 01 Python
Python Flask实现进度条
May 11 #Python
Python PIL按比例裁剪图片
May 11 #Python
python 学习GCN图卷积神经网络
May 11 #Python
Python+Pillow+Pytesseract实现验证码识别
May 11 #Python
Python 绘制多因子柱状图
PyCharm 配置SSH和SFTP连接远程服务器
May 11 #Python
Python 文字识别
May 11 #Python
You might like
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
PHP获取文件行数的方法
2015/06/10 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
jQuery的slideToggle方法实例
2013/05/07 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
requireJS使用指南
2016/04/27 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
Python聚类算法之基本K均值实例详解
2015/11/20 Python
Django小白教程之Django用户注册与登录
2016/04/22 Python
Python批量查询域名是否被注册过
2017/06/21 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
Python3 max()函数基础用法
2019/02/19 Python
Ruby如何定义一个类
2012/10/08 面试题
学校岗位设置方案
2014/01/16 职场文书
进步之星获奖感言
2014/02/22 职场文书
教师节倡议书
2014/08/30 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
校园广播稿范文
2015/08/19 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
Python制作表白爱心合集
2022/01/22 Python