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执行外部程序的常用方法小结
Mar 21 Python
python3编码问题汇总
Sep 06 Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 Python
详解python读取和输出到txt
Mar 29 Python
python输入多行字符串的方法总结
Jul 02 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
解决Python logging模块无法正常输出日志的问题
Feb 21 Python
对python中各个response的使用说明
Mar 28 Python
详解BeautifulSoup获取特定标签下内容的方法
Dec 07 Python
详解Python Celery和RabbitMQ实战教程
Jan 20 Python
python自动化八大定位元素讲解
Jul 09 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
Yii框架中memcache用法实例
2014/12/03 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
JS验证字符串功能
2017/02/22 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
Python 实现简单的电话本功能
2015/08/09 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
python爬虫实现中英翻译词典
2019/06/25 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
后勤自我鉴定
2013/10/13 职场文书
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
一封普通求职者的求职信
2013/11/20 职场文书
《充气雨衣》教学反思
2014/04/07 职场文书
媒体宣传策划方案
2014/05/25 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL