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实现通过shelve修改对象实例
Sep 26 Python
由Python运算π的值深入Python中科学计算的实现
Apr 17 Python
为Python的web框架编写MVC配置来使其运行的教程
Apr 30 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
Flask之flask-session的具体使用
Jul 26 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
Oct 11 Python
python创建子类的方法分析
Nov 28 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
Apr 20 Python
用Python进行websocket接口测试
Oct 16 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 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
2017/12/21 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
会计与出纳自荐书范文
2014/03/16 职场文书
高三毕业寄语
2014/04/10 职场文书
促销活动计划书
2014/05/02 职场文书
工作简历自我评价
2015/03/11 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
闪闪红星观后感
2015/06/08 职场文书
初中班主任心得体会
2016/01/07 职场文书