挑戰(zhàn)練習(xí)腳本運(yùn)行工具的交互優(yōu)化好課加微ypkc_第1頁(yè)
挑戰(zhàn)練習(xí)腳本運(yùn)行工具的交互優(yōu)化好課加微ypkc_第2頁(yè)
挑戰(zhàn)練習(xí)腳本運(yùn)行工具的交互優(yōu)化好課加微ypkc_第3頁(yè)
挑戰(zhàn)練習(xí)腳本運(yùn)行工具的交互優(yōu)化好課加微ypkc_第4頁(yè)
挑戰(zhàn)練習(xí)腳本運(yùn)行工具的交互優(yōu)化好課加微ypkc_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

4.練習(xí):運(yùn)行工具的交互優(yōu)①在課程代碼基礎(chǔ)上增加一個(gè)open按鈕,能彈出系統(tǒng)彈窗選擇任意路徑的文件,然后將文件移動(dòng)到這個(gè)項(xiàng)目代碼所在的GUI文件列表中,并且在程序界面的listbox中顯示了這個(gè)文件。 /done.pngfromrunpyimportrun_pathfromtkinterimport*#frommultiprocessingimportProcessimportmultiprocessingimport#app -->id-->#|script|-->func1-->fun2-->func3#\App\-->disy()&{ifdo()}-->update()&{ifdefmake_app():app=Tk()returnappdeflistb=app.children['listb']fordinos.listdir():deflistb=app.children['listb']s_path=#注意:linux/mac系統(tǒng)下可以使用中的lambda表達(dá)式,windows系統(tǒng)的用戶,需要按此方法調(diào)用Process模塊。#p=multiprocessing.Process(name='print',target=run_path,#其中,argstargetwindowstarget不建議使用lambda表達(dá)式,很容易產(chǎn)生錯(cuò)誤。defforpinmultiprocessing.active_children():=='print':deflistb=app.children['listb']s_path=#注意,在windowslinux/macififname=='main':app=make_app()路徑下?1tkinter.filedialog模塊中的askopenfilenames2.參考【】第一階段中所學(xué)到的shutil模塊,其中的move函數(shù)提供了移3MultiProcessing庫(kù)中Processis_alive()方法,來(lái)檢查一個(gè)進(jìn)程是否已經(jīng)執(zhí)行完畢。并且利用兩個(gè)list來(lái)記錄,一個(gè)list叫running,當(dāng)啟動(dòng)一個(gè)進(jìn)程的時(shí)候,將它放入running中;另一個(gè)list叫have_done,每隔一段時(shí)間檢查running中的每個(gè)進(jìn)程,如果isnotalive,則認(rèn)為該進(jìn)程已經(jīng)運(yùn)行完畢,將其放入have_done中。#coding:utf-fromrunpyimportrun_pathfromtkinterimport*fromtkinter.filedialogimport*importmultiprocessingimportshutilimportrunning=have_done=#創(chuàng)建GUIdefmake_app():app=Listbox(app,name='listb').pack(fill=BOTH,expand=True)Button(app,text='open',command=openfile).pack()Button(app,text='run',command=run_script).pack()Button(app,text='stop',command=stop_script).pack()return#填充listbox,并監(jiān)測(cè)正在運(yùn)行的程序是否已經(jīng)運(yùn)行完畢defui_make_list():#獲取listboxlistbapp.children['listb']#清空l(shuí)istbox中的內(nèi)容fordinlistb.insert(END,d)ifdnotinhave_doneelselistb.insert(END, deff_names=askopenfilenames()forfinf_names:shutil.move(f,'./gui')#運(yùn)行文def#獲取listb=#獲取listboxs_path=#檢查需要run的是否已經(jīng)在運(yùn)==print("Thisscriptisalreadyrunning.")#注意此處targetargs。argstarget#linux/mac系統(tǒng)下可以使用中的lambda表達(dá)式,windows系統(tǒng)下需要按此方法使用,該方法是更標(biāo)準(zhǔn)的法。p=multiprocessing.Process(name=s_path,target=run_path,args=('./gui/'+s_path,))#停止運(yùn)deflistb=app.children['listb']s_path=forpinmultiprocessing.active_children():==s_path:print("Thisscriptisnot#監(jiān)測(cè)程序狀態(tài)def#利用MultiProcessingProcessis_aliveforrinifnotr.is_alive()notinhave_done:listb=app.children['listb']s_path=listb.get(ACTIVE)app.after(1000,watcher)#注意

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論