使用python内部集成的tkinter图形库Tkinteristheeasiestwayifyoudon''twantto haveanyotherdependencies.Toshowonlythedialogwithoutany otherGUIelements,youhavetohidetherootwindowusingthew ithdrawmethod。(1)单文件对于获取单个文件,可用:python3:importtkinterastkfrom tkinterimportfiledialogroot=tk.Tk()root.withdraw()file_pat h=filedialog.askopenfilename()python2:importTkinter,tkFileDia logroot=Tkinter.Tk()root.withdraw()file_path=tkFileDialog.a skopenfilename()这里需要注意的是,实际只用到了filedialog.askopenfilename()函数来获取文 件名,为什么前面还需要创建一个Tkinter.Tk()实例,然后将其隐藏呢(root.withdraw())?因为在使用filed ialog.askopenfilename()时调用了GUI组件,使用后需要有GUI进程来管理这个句柄。当我们注释掉root= Tkinter.Tk()和root.withdraw()后,再运行这段代码,可以发现filedialog.askopenfilen ame()后桌面会一直有个Tk窗口,而且处于未响应状态。(2)多文件对于获取多个文件,可用filedialog.askopenfi lenames(),这个函数返回的一个包含多个文件路径的元组(tuple)。可以通过迭代来对每个文件操作,以实现批处理。示例(批量 读一个文件内容,然后写入另外一个文件中):importtkinterastkfromtkinterimportfile dialogroot=tk.Tk()root.withdraw()file_path=filedialog.askop enfilenames()forfinfile_path:fo=f.split(''.'')[0]+''.csv''with open(fo,''w'')asfoo:withopen(f,''r'')asfn:fn.readline()forl ineinfn.readlines():li=line.strip().split()foo.write(''%f,%f \n''%(float(li[1]),float(li[0])))print(li)三、其他方案当然,还可以通过一些其他的库来实现 同样的功能,如win32ui,wxPython,easygui说一下easygui,这个库是对tk库的一个封装,目的是简单便捷的使 用一些常用的对话框(像调用函数一样调用对话框),跟matlab中的一样,你不需要先显式创建一个窗体。举个例子(获取文件路径):im porteasyguipath=easygui.fileopenbox()获取文件名,只需要一行代码(不包括导入库操作)。但 是,这个库目前还停留在0.97版本(2014-12-20)。不知道存不存在一些bug没有修复 |
|