Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Changing contents of currently displayed listbox in urwid/python2.6

Tags:

python

urwid

I'm writing a music player in python, with a cli using urwid. I intend to have the current playlist in a simpleListWalker, wrapped by a listbox, then columns, a pile, and finally a frame.

How do I replace the entire contents of this listbox (or simpleListWalker) with something else?

Relevant code:

class mainDisplay(object):
...
    def renderList(self):
       songList = db.getListOfSongs()
       songDictList = [item for item in songList if item['location'] in 
       commandSh.currentPlaylists[commandSh.plyr.currentList]]
       self.currentSongWidgets = self.createList(songDictList)
       self.mainListContent = urwid.SimpleListWalker([urwid.AttrMap(w, None, 
       'reveal focus') for w in self.currentSongWidgets])
    def initFace(self):#this is the init function that creates the interface
        #on startup
        ...
        self.scanPlaylists()
        self.renderList()
        self.mainList = urwid.ListBox(self.mainListContent)
        self.columns = urwid.Columns([self.mainList, self.secondaryList])
        self.pile = urwid.Pile([self.columns, 
        ("fixed", 1, self.statusDisplayOne), 
        ("fixed", 1, self.statusDisplayTwo), 
        ("fixed", 1, self.cmdShInterface)], 3)
        self.topFrame = urwid.Frame(self.pile)

Full code at: http://github.com/ripdog/PyPlayer/tree/cli - Check main.py for interface code.

The code is in a pretty bad state right now, and I've only been programming for two months. Any suggestions on code style, layout, or any other tips you may have are very much appreciated.

like image 587
Ripdog Avatar asked Jan 26 '10 03:01

Ripdog


1 Answers

self.mainListContent[:] = [new, list, of, widgets]

should replace the whole list of widgets in place.

Next time post your question to the mailing list or the IRC channel if you want a faster response!

like image 149
Ian Ward Avatar answered Oct 22 '22 09:10

Ian Ward