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调用C语言开发的共享库方法实例
Mar 18 Python
python根据出生年份简单计算生肖的方法
Mar 27 Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
Python3如何解决字符编码问题详解
Apr 23 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 Python
kali中python版本的切换方法
Jul 11 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
详解torch.Tensor的4种乘法
Sep 03 Python
浅谈Python基础之列表那些事儿
May 11 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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
PHP缓冲区用法总结
2016/02/14 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
js表数据排序 sort table data
2009/02/18 Javascript
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
JS 树形递归实例代码
2010/05/18 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
Python中Proxypool库的安装与配置
2018/10/19 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
python3实现字符串操作的实例代码
2019/04/16 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
python的命名规则知识点总结
2019/10/04 Python
使用python制作一个解压缩软件
2019/11/13 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
"火柴棍式"程序员面试题
2014/03/16 面试题
函授本科毕业生自我鉴定
2013/10/16 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
《荷花》教学反思
2014/04/16 职场文书
售票员岗位职责
2015/02/15 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
Python极值整数的边界探讨分析
2021/09/15 Python