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使用递归解决全排列数字示例
Feb 11 Python
Python使用爬虫猜密码
Feb 19 Python
简单谈谈Python中函数的可变参数
Sep 02 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
Jul 23 Python
python找出因数与质因数的方法
Jul 25 Python
Python 限定函数参数的类型及默认值方式
Dec 24 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
Python3变量与基本数据类型用法实例分析
Feb 14 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
python中random.randint和random.randrange的区别详解
Sep 20 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
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
jquery.ui.draggable中文文档
2009/11/24 Javascript
Javascript 面向对象之重载
2010/05/04 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
Element Alert警告的具体使用方法
2020/07/27 Javascript
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
沙特阿拉伯电子产品和家用电器购物网站:Black Box
2019/07/24 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
委托证明模板
2014/09/16 职场文书
义诊活动总结
2015/02/04 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers