利用Python的tkinter模塊實現(xiàn)界面化的批量修改文件名
用Python編寫過批量修改文件名的腳本程序,代碼很簡單,運行也比較快,唯一美中不足之處是每次批量修改文件名時都需要執(zhí)行以下步驟:
- 1)復(fù)制文件夾路徑;
- 2)打開腳本程序
- 3)替換腳本中的文件夾路徑
- 4)保存腳本程序
- 5)執(zhí)行腳本程序
為了便于操作,最好還是弄成GUI界面,手動選擇文件夾,這樣程序也更通用。Python中的GUI庫很多,絕大部分都支持跨平臺,其中安裝python時自帶的GUI庫是tkinter,本文就學(xué)習(xí)并創(chuàng)建基于tkinte的批量修改文件名程序。
本文涉及的知識點包括以下幾個:
- 1)使用tkinter.Tk創(chuàng)建窗口,并且調(diào)用geometry函數(shù)設(shè)置窗口的寬和高,需要注意的是geometry函數(shù)接收的是字符串,寬度x高度,中間的乘號其實是小寫的x,用數(shù)學(xué)符號或者是大寫的X會報錯;
- 2)布局方式:根據(jù)參考文獻1,tkinter有pack、grid、place三種布局方式,本文采購grid布局方式,該方式有點類似Winfom中的TableLayoutPanel,不同之處在于不用提前設(shè)置好行數(shù)和列數(shù),只需指定所用控件的行號和列號即可;
- 3)控件,主要使用了標(biāo)簽(tkinter.Label)、文本(tkinter.Entry)、按鈕(tkinter.Button)控件,tkinte通過變量綁定的方式獲取或更新文本控件的值。
- 4)瀏覽文件夾,根據(jù)參考文獻2,調(diào)用tkinter.filedialog中的askdirectory()選擇文件夾。
全部代碼如下所示:
# coding=gbk import tkinter as tk import os from tkinter.filedialog import askdirectory def BrowseDri(): txtDirPath.set(askdirectory()) def BatchReplaceFileName(): path = txtDirPath.get() strSign=txtRemovedContent.get() files=os.listdir(path) for onefile in files: if onefile.find(strSign)<0: continue oldname=path+"\\"+onefile newname=path+"\\"+onefile.replace(strSign,"") os.rename(oldname,newname) print(oldname,"====>",newname) window=tk.Tk() window.title('批量處理文件名') window.geometry('600x400') tk.Label(window,text='選擇文件夾').grid(row=0,column=0) txtDirPath=tk.StringVar() tk.Entry(window,textvariable=txtDirPath).grid(row=0,column=1) tk.Button(window,text='瀏覽',command=BrowseDri).grid(row=0,column=2) tk.Label(window,text='輸入要移除的內(nèi)容:').grid(row=1,column=0) txtRemovedContent=tk.StringVar() tk.Entry(window,textvariable=txtRemovedContent).grid(row=1,column=1) tk.Button(window,text='移除',command=BatchReplaceFileName).grid(row=1,column=2) tk.mainloop()
最后是程序運行效果,如下面幾張截圖所示:運行程序后,首先選擇要批量處理的文件夾,然后設(shè)置文件名中要移除的內(nèi)容,最后點擊移除按鈕批量處理文件名。
上文主要實現(xiàn)了批量移除文件名中的指定字符串,無法進行替換,本文在前面工作的基礎(chǔ)上,增加批量替換文件名中指定字符串的功能。
新增的功能點不多,主要包括:
- 單選框控件:使用tkinter.Radiobutton函數(shù)創(chuàng)建單選框控件,并用value屬性設(shè)置單選框?qū)?yīng)的值,也即選中單選框時得到的值,提前定義好變量(本文中定義了Int變量),創(chuàng)建單選框控件時用variable屬性綁定變量。如果要設(shè)置默認選中的單選框,則直接設(shè)置變量值為指定單選框?qū)?yīng)的value值即可;
- 設(shè)置文本框的默認狀態(tài):文本框使用state屬性設(shè)置文本框的可用狀態(tài),包括normal/disabled,可以在創(chuàng)建Entry時指定文檔框的state屬性為disabled,則文本框默認不可用;
- 修改控件屬性:除了在創(chuàng)建控件時指定屬性值之外,在程序運行過程中修改控件屬性有多種方式(詳見參考文獻5),本文采用通過字典鍵設(shè)置屬性方式動態(tài)修改文本框的可用狀態(tài)。
批量修改文件名程序的完整代碼如所示:
# coding=gbk import tkinter as tk import os from tkinter.filedialog import askdirectory def BrowseDri(): txtDirPath.set(askdirectory()) def SetControlStatus(): mode=processMode.get() if(mode==1): txtRemoved['state'] = 'normal' txtBeforeReplaced['state'] = 'disabled' txtAfterReplaced['state'] = 'disabled' btnProcess['text']='移除' elif mode==2: txtRemoved['state'] = 'disabled' txtBeforeReplaced['state'] = "normal" txtAfterReplaced['state'] = 'normal' btnProcess['text']='替換' def BatchReplaceFileName(): path = txtDirPath.get() mode=processMode.get() if(mode==1): strOldSign=txtRemovedContent.get() strNewSign="" elif mode==2: strOldSign=txtBeforeReplactContent.get() strNewSign=txtAfterReplactContent.get() files=os.listdir(path) for onefile in files: if onefile.find(strOldSign)<0: continue oldname=path+"\\"+onefile newname=path+"\\"+onefile.replace(strOldSign,strNewSign) os.rename(oldname,newname) print(oldname,"====>",newname) window=tk.Tk() window.title('批量處理文件名') window.geometry('400x300') tk.Label(window,text='選擇文件夾').grid(row=0,column=0) txtDirPath=tk.StringVar() tk.Entry(window,textvariable=txtDirPath).grid(row=0,column=1) tk.Button(window,text='瀏覽',command=BrowseDri).grid(row=0,column=2) processMode =tk.IntVar() tk.Radiobutton(window, text="移除內(nèi)容", variable=processMode, value=1, command=SetControlStatus).grid(row=1,column=0) tk.Label(window,text='輸入要移除的內(nèi)容:').grid(row=1,column=1) txtRemovedContent=tk.StringVar() txtRemoved=tk.Entry(window,textvariable=txtRemovedContent) txtRemoved.grid(row=1,column=2) tk.Radiobutton(window, text="替換內(nèi)容", variable=processMode, value=2, command=SetControlStatus).grid(row=2,column=0) tk.Label(window,text='輸入替換前的內(nèi)容:').grid(row=2,column=1) txtBeforeReplactContent=tk.StringVar() txtBeforeReplaced=tk.Entry(window,textvariable=txtBeforeReplactContent,state='disabled') txtBeforeReplaced.grid(row=2,column=2) tk.Label(window,text='輸入替換后的內(nèi)容:').grid(row=3,column=1) txtAfterReplactContent=tk.StringVar() txtAfterReplaced=tk.Entry(window,textvariable=txtAfterReplactContent,state='disabled') txtAfterReplaced.grid(row=3,column=2) processMode.set(1) btnProcess=tk.Button(window,text='移除',command=BatchReplaceFileName) btnProcess.grid(row=4,column=0) tk.mainloop()
最后是程序效果,如下圖所示,選擇指定文件夾,首先將文件夾中所有文件中的car字符串替換為che@,接著再移除文件名中的@字符。
到此這篇關(guān)于利用Python的tkinter模塊實現(xiàn)界面化的批量修改文件名的文章就介紹到這了,更多相關(guān)Python tkinter批量修改文件名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)基本線性數(shù)據(jù)結(jié)構(gòu)
這篇文章主要實現(xiàn)四種數(shù)據(jù)結(jié)構(gòu),分別是數(shù)組、堆棧、隊列、鏈表。大家都知道可以用C語言實現(xiàn)這幾種數(shù)據(jù)結(jié)構(gòu),其實Python也可以實現(xiàn),下面跟著小編一起來學(xué)習(xí)。2016-08-08三步解決python PermissionError: [WinError 5]拒絕訪問的情況
這篇文章主要介紹了三步解決python PermissionError: [WinError 5]拒絕訪問的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04同時安裝Python2 & Python3 cmd下版本自由選擇的方法
下面小編就為大家分享一篇同時安裝Python2 & Python3 cmd下版本自由選擇的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12Python Web框架之Django框架cookie和session用法分析
這篇文章主要介紹了Python Web框架之Django框架cookie和session用法,結(jié)合實例形式分析了Django框架cookie和session的常見使用技巧與操作注意事項,需要的朋友可以參考下2019-08-08