鱼C论坛

 找回密码
 立即注册
查看: 2619|回复: 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应该怎么写

  1. import easygui as g
  2. import os

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

  4. with open(file_path) as f:
  5.     title = os.path.basename(file_path)
  6.     msg = "文件【%s】的内容如下:" % title
  7.     text = f.read()
  8.     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有个更重要的功能,选择默认初始目录。
小甲鱼最新课程 -> https://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. 如上。
小甲鱼最新课程 -> https://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有个更重要的功能,选择默认初始目录。
小甲鱼最新课程 -> https://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的文件了
还是有点不理解
小甲鱼最新课程 -> https://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。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 10:42:15 | 显示全部楼层
0.97运行不起来,但是检查代码发现和0.98.1没太大区别,运行结果应该是一样的,更老的版本我就没了,下面是我0.98.1运行的代码和结果,你核对一下输入代码是否有不一致的:
  1. fileopenbox(default='*.txt')
复制代码

批注 2020-04-30 103508.png
  1. fileopenbox(default='*',filetypes=['*.txt'])
复制代码

批注 2020-04-30 103725.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我用的应该也是0.98
但是我输入这两段代码,和你的结果正好反过来,凌乱了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

  15.     func = ut.tk_FileDialog.askopenfilenames if multiple else ut.tk_FileDialog.askopenfilename
  16.     ret_val = func(parent=localRoot,
  17.                    title=ut.getFileDialogTitle(msg, title),
  18.                    initialdir=initialdir, initialfile=initialfile,
  19.                    filetypes=filetypes
  20.                    )                                                                                       #<---还有这句是否一样
  21.     if not ret_val or ret_val == '':
  22.         return None
  23.     if multiple:
  24.         f = [os.path.normpath(x) for x in localRoot.tk.splitlist(ret_val)]
  25.     else:
  26.         try:
  27.             f = os.path.normpath(ret_val)
  28.         except AttributeError as e:
  29.             print("ret_val is {}".format(ret_val))
  30.             raise e
  31.     localRoot.destroy()

  32.     if not f:
  33.         return None
  34.     return f
复制代码


还有fileboxsetup.py,只看返回那一句:
  1.    return initialbase, initialfile, initialdir, filetypes        <---这句是否一样
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我看了一下,和你的一样,还是谢谢大神了,我自己再查查吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 12:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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