A minor nit. The cursor is not the same as the selection. To see the 
difference press Control-n. The cursor is identified by the outlined 
box. Of course it's usually the same as the selection.

John

Alan F wrote:
>
>
> > Is there some reason why you are not using the TreeSelection "changed"
> > signal to track the selction changes and update your display? In your
> > case I assume that only one selection at a time is allowed so the
> > "changed" signal would seem to be ideal.
> >
> > John
>
> Thanks John. Finally got it working.
>
> If anybodys interested, I've just created a program that displays the 
> tags of mp3 files in a selected folder. It's quite basic as you have 
> to enter path into script file.
>
>
> # ######### Start of File
> #!/usr/bin/env python
>
> # tag-tree.py
>
> import pygtk
> pygtk.require('2.0')
> import gtk
> import os
> import glob
> from mutagen.id3 import ID3, TPE2, TIT2, TPE1, TALB, TCOM, TDRC, TCON, 
> TRCK, TPOS
>
> MUSIC_DIR = "ENTER MUSIC FOLDER PATH HERE"
>
> class tag_tree:
>
>     # close the window and quit
>     def delete_event(self, widget, event, data=None):
>         gtk.main_quit()
>         return False
>
>     def add_data(self):
>
>         os.chdir(MUSIC_DIR)
>         file_list = glob.glob('*.mp3')
>         first_time = True
>
>         if len(file_list) == 0:
>             print "No mp3 files in folder"
>         else:
>             file_list.sort()
>             for x in file_list:
>                 curr_iter = self.liststore.append([x,x] )
>                 if first_time == True:
>                     first_iter = curr_iter
>                     first_time = False
>         return first_iter
>
>     def change_details(self, widget, txt_area):
>          #get data from highlighted selection      
>                 treeselection = self.treeview.get_selection()
>
>                 (model, iter) = treeselection.get_selected()
>         if iter != None :
>             # Add audio data
>             txt_buffer = gtk.TextBuffer()
>             file_name = self.liststore.get_value(iter, 0)
>             audio = ID3(file_name)   
>             if audio.has_key('TIT2'):
>                 txt_buffer.insert_at_cursor("Title: " + 
> unicode(audio["TIT2"]) + '\n')
>             if audio.has_key('TPE1'):
>                 txt_buffer.insert_at_cursor( "Artist: " + 
> unicode(audio["TPE1"]) + '\n')
>             if audio.has_key('TCOM'):
>                 txt_buffer.insert_at_cursor("Composer: " + 
> unicode(audio["TCOM"]) + '\n')
>             if audio.has_key('TPE2'):
>                 txt_buffer.insert_at_cursor("AlbumArtist: " + 
> unicode(audio["TPE2"]) + '\n')
>             if audio.has_key('TALB'):
>                 txt_buffer.insert_at_cursor("Album: " + 
> unicode(audio["TALB"]) + '\n')
>             if audio.has_key('TCON'):
>                 txt_buffer.insert_at_cursor("Genre: " + 
> unicode(audio["TCON"]) + '\n')
>             if audio.has_key('TDRC'):
>                 txt_buffer.insert_at_cursor("Year: " + 
> unicode(audio["TDRC"]) + '\n')
>             if audio.has_key('TRCK'):
>                 txt_buffer.insert_at_cursor("Track num: " + 
> unicode(audio["TRCK"]) + '\n')
>             if audio.has_key('TPOS'):
>                 txt_buffer.insert_at_cursor("Disc num: " + 
> unicode(audio["TPOS"]) + '\n')               
>             txt_area.set_buffer(txt_buffer)
>
>      def __init__(self):
>         # Create a new window
>         self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
>
>         self.window.set_title("Tag Display")
>         self.window.set_size_request(500, 200)
>         self.window.connect("delete_event", self.delete_event)
>                
>         table1 = gtk.Table(1, 2, False)
>         table1.set_row_spacings( 5)
>         table1.set_col_spacings(5)
>         self.window.add(table1)
>   
>         # create a ListStore with one string column to use as the model
>         self.liststore = gtk.ListStore(str, str)
>         first_iter = self.add_data()
>
>         # create the TreeView using liststore
>         self.treeview = gtk.TreeView(self.liststore)
>         self.treeview.set_headers_visible(False)
>
>         # create the TreeViewColumn to display the data
>         self.tvcolumn = gtk.TreeViewColumn()
>
>         # add tvcolumn to treeview
>         self.treeview.append_column(self.tvcolumn)
>
>         # create a CellRendererText to render the data
>         self.cell = gtk.CellRendererText()
>
>         # add the cell to the tvcolumn and allow it to expand
>         self.tvcolumn.pack_start(self.cell, True)
>
>             # set the cell "text" attribute to column 0 - retrieve text
>             # from that column in treestore
>             self.tvcolumn.add_attribute(self.cell, 'text', 0)
>
>         # make it searchable
>             self.treeview.set_search_column(0)
>        
>
>              # Allow drag and drop reordering of rows
>             self.treeview.set_reorderable(False)
>
>         # values colx, coly, roxx, rowy
>         table1.attach(self.treeview, 0, 1, 0, 1)
>
>         txt_area = gtk.TextView()
>         txt_area.set_editable(False)
>         table1.attach(txt_area, 1,2, 0, 1)
>
>         self.treeview.connect('cursor-changed', self.change_details, 
> txt_area)
>         first_path = self.liststore.get_path(first_iter)
>         self.treeview.set_cursor(0)
>
>             self.window.show_all()
>         table1.show()
>
> def main():
>     gtk.main()
>
> if __name__ == "__main__":
>     tag_tree()
>     main()
>
>
> # ######### End of File
>
> ------------------------------------------------------------------------
> Share your photos with Windows Live Photos – Free Find out more! 
> <http://clk.atdmt.com/UKM/go/132630768/direct/01/>
> ------------------------------------------------------------------------
>
> _______________________________________________
> pygtk mailing list   pygtk@daa.com.au
> http://www.daa.com.au/mailman/listinfo/pygtk
> Read the PyGTK FAQ: http://faq.pygtk.org/

_______________________________________________
pygtk mailing list   pygtk@daa.com.au
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to