Tkinter示例:文件系統(tǒng)遍歷GUI

1 示例簡介

目錄樹遍歷工具。

它會(huì)從當(dāng)前目錄開始桦锄,提供一個(gè)文件列表。

雙擊列表中任意其他目錄蔫耽,就會(huì)使得工具切換到新目錄中结耀,用新目錄中的文件列表代替舊文件列表。

2 實(shí)現(xiàn)方法

獲取目錄匙铡;顯示目錄图甜;跳轉(zhuǎn)目錄;獲取目錄鳖眼;顯示目錄黑毅。

2.1 獲取目錄——核心函數(shù):os.listdir(tdir)

這個(gè)示例的核心是要將某個(gè)路徑下的文件顯示出來,那么首先就要想辦法獲取這些文件钦讳,這里的關(guān)鍵函數(shù)就是:os.listdir(tdir)矿瘦,他可以獲得某個(gè)路徑tdir下的所有文件枕面。然后,再考慮怎么在圖形界面進(jìn)行顯示缚去。


2.2 顯示目錄——核心函數(shù):Listbox.insert()

Paste_Image.png

self.dirs.insert(END,os.curdir)中潮秘,END是要插入的元素的位置,可以理解為數(shù)組的末尾易结。

其中枕荞,dirs是Listbox類型,98-99兩行在dirs中添加了當(dāng)前目錄‘.’和上級(jí)目錄‘..’搞动。

我是怎么查到dirs的size()和get()方法的呢躏精?

在源文件Tkinter.py中搜索關(guān)鍵詞“Listbox”可以查看他的所有方法:


Paste_Image.png

運(yùn)行到100行,給dirs中添加了鹦肿,當(dāng)前目錄‘.’和上級(jí)目錄‘..’:

Paste_Image.png

繼續(xù)執(zhí)行矗烛,會(huì)發(fā)現(xiàn)當(dāng)前目錄下的文件列表被添加進(jìn)去了:

Paste_Image.png

2.3 跳轉(zhuǎn)目錄——核心函數(shù):

當(dāng)雙擊某一個(gè)文件時(shí),能進(jìn)入那個(gè)文件狮惜,發(fā)揮作用的函數(shù)是setDirAndGo

self.dirs.curselection()可以獲取當(dāng)前選取的文件名险毁。

3 源代碼

#!/usr/bin/env python
# coding=utf-8

import pdb
import os
from time import sleep
from Tkinter import *

class DirList(object):
    def __init__(self, initdir=None):
        #pdb.set_trace()
        self.top = Tk()
        self.label = Label(self.top, text='Directory Lister v1.1')
        self.label.pack()

        self.cwd = StringVar(self.top)

        self.dirl = Label(self.top,fg='blue',font=('Helvetica',12,'bold'))
        self.dirl.pack()

        self.dirfm = Frame(self.top)
        self.dirsb = Scrollbar(self.dirfm)
        self.dirsb.pack(side=RIGHT, fill=Y)
        self.dirs = Listbox(self.dirfm,height=15,width=50,yscrollcommand=self.dirsb.set)
        self.dirs.bind('<Double-1>',self.setDirAndGo)
        self.dirsb.config(command=self.dirs.yview)
        self.dirs.pack(side=LEFT,fill=BOTH)
        self.dirfm.pack()

        self.dirn = Entry(self.top,width=50,textvariable=self.cwd)
        self.dirn.bind('<Return>',self.doLS)
        self.dirn.pack()

        self.bfm = Frame(self.top)
        self.clr = Button(self.bfm,text='Clear',
            comman=self.clrDir,
            activeforeground='white',
            activebackground='blue')
        self.ls = Button(self.bfm,
            text='List Directory',
            command=self.doLS,
            activeforeground='white',
            activebackground='green')
        self.quit= Button(self.bfm,text='Quit',
            command=self.top.quit,
            activeforeground='white',
            activebackground='red')
        self.clr.pack(side=LEFT)
        self.ls.pack(side=LEFT)
        self.quit.pack(side=LEFT)
        self.bfm.pack()

        if initdir:
            self.cwd.set(os.curdir)
            self.doLS()

    def clrDir(self, ev=None):
        self.cwd.set('')

    def setDirAndGo(self,ev=None):
        self.last=self.cwd.get()
        self.dirs.config(selectbackground='red')
        check = self.dirs.get(self.dirs.curselection())
        if not check:
            check=os.curdir
        self.cwd.set(check)
        self.doLS()

    def doLS(self,ev=None):
        error=''
        tdir = self.cwd.get()
        if not tdir: tdir=os.curdir

        if not os.path.exists(tdir):
            error = tdir +': no such file'
        elif not os.path.isdir(tdir):
            error = tdir +': not a Directory'

        if error:
            self.cwd.set(error)
            self.top.update()
            sleep(2)
            if not (hasattr(self,'last')\
               and self.last):
               self.last = os.curdir
            self.cwd.set(self.last)
            self.dirs.config(selectbackground='LightSkyBlue')
            self.top.update()
            return
        self.cwd.set('FETCHING DIRECTORY CONTENTS...')
        self.top.update()
        dirlist = os.listdir(tdir)
        dirlist.sort()
        os.chdir(tdir)

        self.dirl.config(text=os.getcwd())
        self.dirs.delete(0,END)
        self.dirs.insert(END,os.curdir)
        self.dirs.insert(END, os.pardir)
        for eachFile in dirlist:
            self.dirs.insert(END,eachFile)
        self.cwd.set(os.curdir)
        self.dirs.config(selectbackground='LightSkyBlue')

def main():
    d = DirList(os.curdir)
    mainloop()

if __name__ == '__main__':
    pdb.set_trace()
    main()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末割按,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尾膊,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廓鞠,死亡現(xiàn)場離奇詭異口四,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)穆律,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門惠呼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人峦耘,你說我怎么就攤上這事剔蹋。” “怎么了辅髓?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵泣崩,是天一觀的道長。 經(jīng)常有香客問我洛口,道長矫付,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任第焰,我火速辦了婚禮买优,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己杀赢,他們只是感情好烘跺,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葵陵,像睡著了一般液荸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脱篙,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天娇钱,我揣著相機(jī)與錄音,去河邊找鬼绊困。 笑死文搂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秤朗。 我是一名探鬼主播煤蹭,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼取视!你這毒婦竟也來了硝皂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤作谭,失蹤者是張志新(化名)和其女友劉穎稽物,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體折欠,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贝或,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锐秦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咪奖。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖酱床,靈堂內(nèi)的尸體忽然破棺而出羊赵,到底是詐尸還是另有隱情,我是刑警寧澤扇谣,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布慷垮,位于F島的核電站,受9級(jí)特大地震影響揍堕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汤纸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一衩茸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贮泞,春花似錦楞慈、人聲如沸幔烛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饿悬。三九已至,卻和暖如春聚霜,著一層夾襖步出監(jiān)牢的瞬間狡恬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工蝎宇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弟劲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓姥芥,卻偏偏與公主長得像兔乞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子凉唐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,175評(píng)論 2 33
  • 《裕語言》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 27,025評(píng)論 5 19
  • 《ijs》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 5,192評(píng)論 0 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理庸追,服務(wù)發(fā)現(xiàn),斷路器台囱,智...
    卡卡羅2017閱讀 134,702評(píng)論 18 139
  • 一顆相思梅 解盡相思苦 登高身自遠(yuǎn) 忘卻身心念 望山山不在 望水水無痕 顛行多路人 愿寬身與心
    白紙文字閱讀 355評(píng)論 0 0