来自:zip11 > 馆藏分类
配色: 字号:
文件对话框获取文件路径 python
2022-04-28 | 阅:  转:  |  分享 
  
使用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没有修复
献花(0)
+1
(本文系zip11首藏)