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 相关文章推荐
详解字典树Trie结构及其Python代码实现
Jun 03 Python
python版本的仿windows计划任务工具
Apr 30 Python
python 常见字符串与函数的用法详解
Nov 23 Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
python 实现保存最新的三份文件,其余的都删掉
Dec 22 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
PyInstaller的安装和使用的详细步骤
Jun 02 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
Feb 22 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 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
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
快速开发一个PHP扩展图文教程
2008/12/12 PHP
PHP 用数组降低程序的时间复杂度
2009/12/04 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
Python字典操作简明总结
2015/04/13 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
Python引用计数操作示例
2018/08/23 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
高级3D打印市场:Gambody
2019/12/26 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
年终晚会活动方案
2014/08/21 职场文书
委托书格式要求
2015/01/28 职场文书
昆虫记读书笔记
2015/06/26 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript