鱼C论坛

 找回密码
 立即注册
查看: 2290|回复: 8

[已解决]fileopenbox中default和filetypes两个参数

[复制链接]
发表于 2020-4-29 17:02:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 努力去见你 于 2020-4-29 17:15 编辑

下方代码为小甲鱼的想知道以下几个问题
1.default="hello*.txt"是只显示文件名为hello.txt的文件,那default="*.txt"和default="*"有什么区别
2.file_path = g.fileopenbox(default="*",filetypes="*.py")只显示后缀为.py的文件,那下方代码default="*.txt"的意义是什么,有什么用途
3. filetypes = [["*.css", "css 文件"],["*.html", ".*.htm", "HTML files"],["*.exe","EXE 文件"]]这种写法default应该怎么写
import easygui as g
import os

file_path = g.fileopenbox(default="*.txt")

with open(file_path) as f:
    title = os.path.basename(file_path)
    msg = "文件【%s】的内容如下:" % title
    text = f.read()
    g.textbox(msg, title, text)
最佳答案
2020-4-29 18:17:07
1.default="*.txt"的意思是默认显示后缀名是txt的文件,而default="*"是显示所有文件,不要这句也行,默认就这个。
2.default="*",filetypes="*.py"实际上写错了,应该是:default="*",filetypes=["*.py"],没方括号filetypes无效,改正后的意思是默认显示所有文件,在文件类型的下拉列表里多了一项*.py可以选择过滤文件。而default="*.txt"则默认显示所有的txt文件,想要显示所有文件,可以在文件类型下拉列表里选择All files。
3.filetypes参数是在文件类型下拉列表中添加过滤的选项,和default没直接关系,你也可以在default指定优先显示的文件类型,即使default指定的文件类型在filetypes里没有,也会加入到文件类型下拉列表里。default不指定则是默认显示所有文件。
其实default有个更重要的功能,选择默认初始目录。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 17:22:07 | 显示全部楼层
1. default="hello*.txt" 是显示文件名为 hello(xxx).txt(也就是 hello 后面还可以跟东西)的文件,default="*.txt" 和 default="*" 的区别是,如果 default="*.txt",那当用户输入文件名为 abc 会自动在后面加上后缀 .txt,即最后返回 abc.txt(如果用户已经输入了后缀则不会添加后缀),而如果 default="*.txt" 则不会自动添加后缀。

2. 如上。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 18:17:07 | 显示全部楼层    本楼为最佳答案   
1.default="*.txt"的意思是默认显示后缀名是txt的文件,而default="*"是显示所有文件,不要这句也行,默认就这个。
2.default="*",filetypes="*.py"实际上写错了,应该是:default="*",filetypes=["*.py"],没方括号filetypes无效,改正后的意思是默认显示所有文件,在文件类型的下拉列表里多了一项*.py可以选择过滤文件。而default="*.txt"则默认显示所有的txt文件,想要显示所有文件,可以在文件类型下拉列表里选择All files。
3.filetypes参数是在文件类型下拉列表中添加过滤的选项,和default没直接关系,你也可以在default指定优先显示的文件类型,即使default指定的文件类型在filetypes里没有,也会加入到文件类型下拉列表里。default不指定则是默认显示所有文件。
其实default有个更重要的功能,选择默认初始目录。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-30 09:04:10 | 显示全部楼层
本帖最后由 努力去见你 于 2020-4-30 09:05 编辑
txxcat 发表于 2020-4-29 18:17
1.default="*.txt"的意思是默认显示后缀名是txt的文件,而default="*"是显示所有文件,不要这句也行,默认 ...


1,default="*.txt"的意思是默认显示后缀名是txt的文件
这个我run了之后,还会显示后缀名是py的文件
default="*",filetypes=['*.txt'],我这么写之后只显示后缀名是txt的文件了
还是有点不理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 09:56:02 | 显示全部楼层
努力去见你 发表于 2020-4-30 09:04
1,default="*.txt"的意思是默认显示后缀名是txt的文件
这个我run了之后,还会显示后缀名是py的文件
...

你的easygui版本是多少?我的是0.98.1,我发现0.97的fileopen_box有bug,但不清楚和你出现的现象有没有关联,如果你的版本不是最新的,试试升级easygui。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 10:42:15 | 显示全部楼层
0.97运行不起来,但是检查代码发现和0.98.1没太大区别,运行结果应该是一样的,更老的版本我就没了,下面是我0.98.1运行的代码和结果,你核对一下输入代码是否有不一致的:
fileopenbox(default='*.txt')
批注 2020-04-30 103508.png
fileopenbox(default='*',filetypes=['*.txt'])
批注 2020-04-30 103725.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 11:22:34 | 显示全部楼层
txxcat 发表于 2020-4-30 10:42
0.97运行不起来,但是检查代码发现和0.98.1没太大区别,运行结果应该是一样的,更老的版本我就没了,下面是 ...

我用的应该也是0.98
但是我输入这两段代码,和你的结果正好反过来,凌乱了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 11:38:13 | 显示全部楼层
努力去见你 发表于 2020-4-30 11:22
我用的应该也是0.98
但是我输入这两段代码,和你的结果正好反过来,凌乱了

那只剩下一种可能性了,就是代码改了,你打开fileopen_box.py,看看下面注释的是否一样:
    localRoot = tk.Tk()
    localRoot.withdraw()

    initialbase, initialfile, initialdir, filetypes = fbs.fileboxSetup(                    #<---这句的顺序是否一样
        default, filetypes)

    # ------------------------------------------------------------
    # if initialfile contains no wildcards; we don't want an
    # initial file. It won't be used anyway.
    # Also: if initialbase is simply "*", we don't want an
    # initialfile; it is not doing any useful work.
    # ------------------------------------------------------------
    if (initialfile.find("*") < 0) and (initialfile.find("?") < 0):
        initialfile = None
    elif initialbase == "*":
        initialfile = None

    func = ut.tk_FileDialog.askopenfilenames if multiple else ut.tk_FileDialog.askopenfilename
    ret_val = func(parent=localRoot,
                   title=ut.getFileDialogTitle(msg, title),
                   initialdir=initialdir, initialfile=initialfile,
                   filetypes=filetypes
                   )                                                                                       #<---还有这句是否一样
    if not ret_val or ret_val == '':
        return None
    if multiple:
        f = [os.path.normpath(x) for x in localRoot.tk.splitlist(ret_val)]
    else:
        try:
            f = os.path.normpath(ret_val)
        except AttributeError as e:
            print("ret_val is {}".format(ret_val))
            raise e
    localRoot.destroy()

    if not f:
        return None
    return f

还有fileboxsetup.py,只看返回那一句:
   return initialbase, initialfile, initialdir, filetypes        <---这句是否一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 13:49:15 | 显示全部楼层
txxcat 发表于 2020-4-30 11:38
那只剩下一种可能性了,就是代码改了,你打开fileopen_box.py,看看下面注释的是否一样:

我看了一下,和你的一样,还是谢谢大神了,我自己再查查吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 00:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表