/Pycon2009/internet/examples/ch19/alt/listdir.py

https://github.com/toastdriven/pydanny-event-notes · Python · 126 lines · 83 code · 23 blank · 20 comment · 13 complexity · 66144c8372e382eefd803641d0338ae5 MD5 · raw file

  1. #!/usr/bin/env python
  2. # $Id: listdir.py,v 1.8 2000/05/26 10:19:30 wesc Exp $
  3. #
  4. # listdir.py -- traverse directory tree
  5. #
  6. # created by wesc 00/02/20
  7. #
  8. import Tkinter, os, time, string
  9. __version__ = string.split('$Revision: 1.8 $')[1]
  10. class DirList:
  11. # do everything!
  12. def __init__(self, initdir=None):
  13. self.top = Tkinter.Tk()
  14. self.label = Tkinter.Label(self.top, text='Directory Lister' + ' v' + __version__)
  15. self.label.pack()
  16. self.cwd=Tkinter.StringVar(self.top)
  17. self.dirl = Tkinter.Label(self.top, fg='blue', font=('Helvetica', 12, 'bold'))
  18. self.dirl.pack()
  19. self.dirfm = Tkinter.Frame(self.top)
  20. self.dirsb = Tkinter.Scrollbar(self.dirfm)
  21. self.dirsb.pack(side=Tkinter.RIGHT, fill=Tkinter.Y)
  22. self.dirs = Tkinter.Listbox(self.dirfm, height=15, width=50, yscrollcommand=self.dirsb.set)
  23. self.dirs.bind('<Double-1>', self.setdirandgo)
  24. self.dirsb.config(command=self.dirs.yview)
  25. self.dirs.pack(side=Tkinter.LEFT, fill=Tkinter.BOTH)
  26. self.dirfm.pack()
  27. self.dirn = Tkinter.Entry(self.top, width=50, textvariable=self.cwd)
  28. self.dirn.bind('<Return>', self.dols)
  29. self.dirn.pack()
  30. self.bfm = Tkinter.Frame(self.top)
  31. self.clr = Tkinter.Button(self.bfm, text='Clear', command=self.clrdir, activeforeground='white', activebackground='blue')
  32. self.ls = Tkinter.Button(self.bfm, text='List Directory', command=self.dols, activeforeground='white', activebackground='green')
  33. self.quit = Tkinter.Button(self.bfm, text='Quit', command=self.top.quit, activeforeground='white', activebackground='red')
  34. self.clr.pack(side=Tkinter.LEFT)
  35. self.ls.pack(side=Tkinter.LEFT)
  36. self.quit.pack(side=Tkinter.LEFT)
  37. self.bfm.pack()
  38. if initdir:
  39. # put selection in entry and do it
  40. self.cwd.set(os.curdir)
  41. self.dols()
  42. # clear entry
  43. def clrdir(self, ev=None):
  44. self.cwd.set('')
  45. # set dir entry
  46. def setdirandgo(self, ev=None):
  47. # save last search
  48. self.last = self.cwd.get()
  49. # set red bg while searching
  50. self.dirs.config(selectbackground='red')
  51. # grab listbox selection, default to ('.') os.curdir if not there
  52. check = self.dirs.get(self.dirs.curselection())
  53. if not check:
  54. check = os.curdir
  55. # grab selection and strip any extra chars (a la 'ls -F')
  56. if check[-1] in '@/*': check = check[:-1]
  57. # set entry and run
  58. self.cwd.set(check)
  59. self.dols()
  60. def dols(self, ev=None):
  61. error = ''
  62. # check if a exist and if directory
  63. tdir = self.cwd.get()
  64. vi = 0
  65. if not tdir:
  66. tdir = os.curdir
  67. if not os.path.exists(tdir):
  68. error = tdir + ': no such file'
  69. elif not os.path.isdir(tdir):
  70. if os.name == 'posix':
  71. vi = 1
  72. error = tdir + ': starting "vi" in xterm...'
  73. else:
  74. error = tdir + ': not a directory'
  75. if error:
  76. self.cwd.set(error)
  77. self.top.update()
  78. time.sleep(2)
  79. if not (hasattr(self, 'last') and self.last):
  80. self.last = os.curdir
  81. self.cwd.set(self.last)
  82. self.dirs.config(selectbackground='LightSkyBlue')
  83. self.top.update()
  84. if vi:
  85. os.system("xterm -rv -e vi " + tdir)
  86. return
  87. # get listing
  88. self.cwd.set('FETCHING DIRECTORY CONTENTS...')
  89. self.top.update()
  90. dirlist = os.listdir(tdir)
  91. # go there to for relativity
  92. os.chdir(tdir)
  93. self.dirl.config(text=os.getcwd())
  94. # replace old file listing
  95. self.dirs.delete(0, Tkinter.END)
  96. self.dirs.insert(Tkinter.END, os.curdir)
  97. self.dirs.insert(Tkinter.END, os.pardir)
  98. for eachFile in dirlist:
  99. self.dirs.insert(Tkinter.END, eachFile)
  100. self.cwd.set(tdir)
  101. self.dirs.config(selectbackground='LightSkyBlue')
  102. d = DirList(os.curdir)
  103. Tkinter.mainloop()