Hi 

I am new to GTK programming. I want to create a program that displays the 
sub-folders of a main folder in a tree view format. Once I find the particular 
sub-folder , I want to be able to click on it to display the contents of that 
folder. When the contents of that folder is displayed, I want to click on any 
file to display the mp3 tags of that file.

I have managed to get a program working that displays all the sub-folders of 
the main folder as a treeview. The problem is I am having trouble trying to get 
it to do the next step i.e. when I click on a sub-folder I want to display the 
contents of that folder.

After googling around, I found a post that used a solution of adding a button 
event to the treeview. I put it in an example code below and it works but with 
a problem.  

Firstly, to describe the actions of the example code, I've created a treeeview 
that has 3 parents and 3 childs, when I click on a selection (either parent or 
child), the value of that selection is printed in the console.

The problem is that when I click on any selection, nothing happens. When I 
click on it again, the value of that selection is displayed. When I click on 
another selection, the value of the previous selection is displayed. When I 
click on that selection again, the values are displayed. On clicking on any 
selection, the value of the previous one is displayed.

I've put console print statements throughout the code and the contents are 
definately being displayed when I single click on selection. I can only think 
it is something to do with the lines  treeselection = 
self.treeview.get_selection(), (model, iter) = treeselection.get_selected(). 

I've checked the API and in TreeSelection there is text that may have something 
to do my issue:

"One of the important things to remember when monitoring the selection
of a view is that the "changed" signal is mostly a hint. That is, it
may only emit one signal when a range of rows is selected.
Additionally, it may on occasion emit a "changed" signal when nothing
has happened (mostly as a result of programmers calling the select_path() or 
select_iter() methods on an already selected row)."

I don't really know enough about GTK programming to understand where to start 
to look to fix this. Can someone please point me in the right direction?


# #######Start of file
#!/usr/bin/env python


import pygtk
pygtk.require('2.0')
import gtk
import os

class BasicTreeViewExample:

    # close the window and quit
    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False

    def add_data(self):

        # we'll add some data now - 4 rows with 3 child rows each
            for parent in range(4):
                    piter = self.treestore.append(None, ['parent %i' % parent,  
'value %i' %parent])
            #print "this is path of parent " + str(parent) 
            #print self.treestore.get_path(piter)

                    for child in range(3):
                        citr = self.treestore.append(piter, ['parent  %i child 
%i' % (parent, child, ),  'value %i' %parent])
            #print "this is path of parent " + str(parent) + "child " + 
str(child)
            #print self.treestore.get_path(citr)


    def selectTest(self, widget, event):
        print "This is event button"
        print event.button
        # Mouse press confirmed ok
                if event.button == 1:
 
                        #get data from highlighted selection       
                        treeselection = self.treeview.get_selection()

                        (model, iter) = treeselection.get_selected()
            if iter != None :
                print "this is path of selected " 

                print self.treestore.get_path(iter)
                            print "value or select store"
                print self.treestore.get_value(iter, 0)
                print model.get_value(iter, 0)

            else:
                print "no selection made"

    def __init__(self):
        # Create a new window
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

        self.window.set_title("Music Collection")

        self.window.set_size_request(300, 200)

        self.window.connect("delete_event", self.delete_event)
       
        # create a new scrolled window.
            scrolled_window = gtk.ScrolledWindow()
            scrolled_window.set_border_width(10)

            # the policy is one of POLICY AUTOMATIC, or POLICY_ALWAYS.
            # POLICY_AUTOMATIC will automatically decide whether you need
            # scrollbars, whereas POLICY_ALWAYS will always leave the scrollbars
            # there. The first one is the horizontal scrollbar, the second, the
            # vertical.
            scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)

            # The dialog window is created with a vbox packed into it.
            #self.window.vbox.pack_start(scrolled_window, True, True, 0)
            scrolled_window.show()

        # create a TreeStore with one string column to use as the model
        self.treestore = gtk.TreeStore(str, str)
        self.add_data()

        # create the TreeView using liststore
        self.treeview = gtk.TreeView(self.treestore)
        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)
        
        self.treeview.add_events(gtk.gdk.BUTTON_PRESS_MASK)
        self.treeview.connect('button_press_event', self.selectTest)

            # Allow sorting on the column
            #self.tvcolumn.set_sort_column_id(0)

            # Allow drag and drop reordering of rows
            self.treeview.set_reorderable(True)

        # pack the table into the scrolled window
        scrolled_window.add_with_viewport(self.treeview)
        self.window.add(scrolled_window)
             self.window.show_all()

def main():
    gtk.main()

if __name__ == "__main__":
    tvexample = BasicTreeViewExample()
    main()


# #######End of file


_________________________________________________________________
Twice the fun—Share photos while you chat with Windows Live Messenger. Learn 
more.
http://www.microsoft.com/uk/windows/windowslive/products/messenger.aspx
_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to