Tiago Saboga wrote:
> I'm trying to write a file browser with urwid. In the future, I want to make 
> a 
> light front-end for cds burning, but for now I'm doing it as an exercise. The 
> problem is I'm a little stuck now. I'm sending my actual working code, with 
> some working functionality, but I would like to know if I should go ahead or 
> if I stop now to make it better.
>
> In fact, I don't know why I'm using a pyrun class, so I think I should get 
> rid 
> of it. And I think my try/except clause in pyrun's __init__ method is ugly, 
> but I couldn't find nothing better.
>   
The class seems to be mostly used as a container for a few variables. 
That's an OK reason to use a class. You might be able to use functions 
with a few more parameters, but if the alternative is to use global 
variables I would use a class. I don't know urwid but in my experience 
GUI programs tend to be object-oriented so I wouldn't sweat that.

get_file_names() doesn't use self at all so it could be a module function.

I would break up __init__() into two parts, an actual initializer that just 
initializes self.initial_cwd and self.cwd, and a new function (reset()?) that 
does the rest of the work. Then __init__() and main() would both call reset() 
and you could get rid of the try/except.

Kent 

> Ah, and thanks everybody who helped me some months ago; I had some personal 
> problems and couldn't answer, but it really helped.
>
> Tiago.
>
> The code:
>
> #!/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):
>               try:
>                       self.items = self.get_file_names( self.cwd )
>               except AttributeError:
>                       self.initial_cwd = os.getcwd()
>                       self.cwd = self.initial_cwd
>                       self.items = self.get_file_names( self.cwd )
>               self.listbox = urwid.AttrWrap ( urwid.ListBox( self.items ), 
> 'browser')
>               menu_txt = urwid.Text("F1 - Help     F2 - Options     F10 - 
> Quit    
> Now: %s" % self.cwd)
>               header = urwid.AttrWrap( menu_txt, 'header')
>               down_txt = urwid.Text("pybrowser. Left Arrow: Parent.")
>               footer = urwid.AttrWrap( down_txt, 'footer')
>               self.top = urwid.Frame( self.listbox, header, footer )
>               
>       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]
>                                       self.__init__()
>                                       continue
>       def draw_screen( self, size ):
>               canvas = self.top.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 = [ 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  -  Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
>
>
>   


_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to