努力去见你 发表于 2020-4-29 17:02:09

fileopenbox中default和filetypes两个参数

本帖最后由 努力去见你 于 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)

zltzlt 发表于 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. 如上。

txxcat 发表于 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有个更重要的功能,选择默认初始目录。

努力去见你 发表于 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的文件了
还是有点不理解

txxcat 发表于 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。

txxcat 发表于 2020-4-30 10:42:15

0.97运行不起来,但是检查代码发现和0.98.1没太大区别,运行结果应该是一样的,更老的版本我就没了,下面是我0.98.1运行的代码和结果,你核对一下输入代码是否有不一致的:
fileopenbox(default='*.txt')

fileopenbox(default='*',filetypes=['*.txt'])

努力去见你 发表于 2020-4-30 11:22:34

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

我用的应该也是0.98
但是我输入这两段代码,和你的结果正好反过来{:9_239:},凌乱了

txxcat 发表于 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 =
    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      <---这句是否一样

努力去见你 发表于 2020-4-30 13:49:15

txxcat 发表于 2020-4-30 11:38
那只剩下一种可能性了,就是代码改了,你打开fileopen_box.py,看看下面注释的是否一样:




我看了一下,和你的一样{:9_220:},还是谢谢大神了,我自己再查查吧
页: [1]
查看完整版本: fileopenbox中default和filetypes两个参数