Thank you Kent, I've done the modifications you suggested, and the code
follows. I splitted the __init__ method in four methods (__init__, header,
footer, dir_browser) and took the get_file_names out of pyrun class. Now I
have two more general questions, if you don't mind.
1) (first a philosophical/methodological question) I see now that we can use
classes in at least two ways. In my code, the class, as you said, is used as
a container. In this case, the distinction class/instance isn't really
important, as I will never have several instances of the same class. OTOH, I
suppose it's not really OO programming. These statements are ok?
2) (a technical question, now) How do I test if a variable has been declared?
In my first code, I used the try/except clause for that, but now you showed
me a way of doing it without testing. But now I would like to add a cache in
get_file_names(). For that, I would create a dir_cache variable of type dict,
and store in it {'cwd': 'dirlist + filelist'} pairs. But how do I know if
it's the first time, if I have to create the variable or just read from it?
Thanks,
Tiago.
#!/usr/bin/python
import urwid
import urwid.curses_display
import os
ui = urwid.curses_display.Screen()
ui.register_palette( [
('splash', 'black', 'dark red'),
('bg_splash', 'black', 'dark blue'),
('header', 'white', 'black'),
('footer', 'dark red', 'light gray'),
('browser', 'white', 'dark blue'),
('selected', 'white', 'dark red'),
('file', 'light gray', 'dark blue'),
('dir', 'light magenta', 'dark blue')
])
def run():
size = ui.get_cols_rows()
inst = pyrun()
inst.main()
class pyrun:
def __init__(self):
self.initial_cwd = os.getcwd()
self.cwd = self.initial_cwd
def main(self):
size = ui.get_cols_rows()
while True:
self.draw_screen( size )
keys = ui.get_input()
if "f10" in keys:
break
for k in keys:
if k == "window resize":
size = ui.get_cols_rows()
continue
elif k == "left":
self.cwd = os.path.split(self.cwd)[0]
def header(self):
menu_txt = urwid.Text("F1 - Help F2 - Options F10 -
Quit
Now: %s" % self.cwd)
return urwid.AttrWrap( menu_txt, 'header')
def footer(self):
down_txt = urwid.Text("pybrowser. Left Arrow: Parent.")
return urwid.AttrWrap( down_txt, 'footer')
def dir_browser(self):
self.items = self.get_file_names ( self.cwd )
return urwid.AttrWrap ( urwid.ListBox( self.items ), 'browser')
def top_frame(self):
return urwid.Frame( self.dir_browser(), self.header(),
self.footer() )
def draw_screen( self, size ):
canvas = self.top_frame().render( size, focus=True )
ui.draw_screen( size, canvas )
def get_file_names(self, cwd):
desc_list = os.listdir( cwd )
dir_list = []
file_list = []
for f in desc_list:
if os.path.isdir(os.path.join(cwd, f)):
dir_list.append(f)
elif os.path.isfile(os.path.join(cwd,f)):
file_list.append(f)
file_list.sort()
dir_list.sort()
file_list = [ urwid.AttrWrap ( urwid.Text(f) , 'file') for f in
file_list ]
dir_list = [ urwid.AttrWrap ( urwid.Text(f) , 'dir') for f in
dir_list ]
return ( dir_list + file_list )
ui.run_wrapper( run )
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor