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教程之用py2exe将PY文件转成EXE文件
Jun 12 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
在MAC上搭建python数据分析开发环境
Jan 26 Python
一篇文章快速了解Python的GIL
Jan 12 Python
Python的CGIHTTPServer交互实现详解
Feb 08 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
python实现翻转棋游戏(othello)
Jul 29 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
Python的缺点和劣势分析
Nov 19 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
Python常用数字处理基本操作汇总
Sep 10 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开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
php微信开发之关注事件
2018/06/14 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
AmazeUI 按钮交互的实现示例
2020/08/24 HTML / CSS
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
中职生自我鉴定范文
2013/10/03 职场文书
2015教师年度考核评语
2015/03/25 职场文书
2015公司年度工作总结
2015/05/14 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
用Python可视化新冠疫情数据
2022/01/18 Python