Hi,
Quoting Alan <[email protected]>:
The problem is that if more than one item is selected, say two, you have
to click on the second item twice for it to register when the button is
clicked.
You should look into the 'changed' signal of the treeselection object
instead of using the 'cursor-changed' signal of the treeview itself.
I've adapted your first example, see below.
hth,
Dieter
#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
import logging
# Turn logging on or off
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s%(levelname)s: %(message)s',datefmt='%Y-%m-%d
%H:%M:%S') # Turn logging on
#logging.basicConfig() # Turn debugging off
class BasicTreeViewExample:
pathlist = []
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(500, 200)
self.window.connect("delete_event", self.on_delete_event)
table1 = gtk.Table(1, 2, False)
table1.set_row_spacings( 5)
table1.set_col_spacings(5)
self.window.add(table1)
# create the TreeView using liststore
self.treeview = self._my_treeview()
treeselection = self.treeview.get_selection()
treeselection.connect('changed', self.selecttest1)
treeselection.set_mode(gtk.SELECTION_MULTIPLE)
# values colx, coly, roxx, rowy
table1.attach(self.treeview, 0, 1, 0, 1)
my_button = gtk.Button("click here")
my_button.connect('clicked', self.on_button_clicked)
table1.attach(my_button, 1,2, 0, 1)
self.window.show_all()
def _my_treeview(self):
# create a ListStore with one string column to use as
the model
self.liststore = gtk.ListStore(str, str)
self._add_data()
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)
return (self.treeview)
def _add_data(self):
# we'll add some data now - 4 rows
self.liststore.append(["acdc - highway to hell",
"$MUSIC\acdc\highway"])
self.liststore.append(["Saxon - inner sanctum",
"$MUSIC\saxon\inner"])
self.liststore.append(["Gun - Greatest Hist",
"$MUSIC\gun\greatest_hits"])
self.liststore.append(["ABC - Look of love",
"$music\abc\look_of_love"])
# close the window and quit
def on_delete_event(self, widget, event, data=None):
gtk.main_quit()
return False
def on_button_clicked(self, widget, data=None):
print ("button pressed")
logging.debug("contents of pathlist" + str(self.pathlist))
logging.debug("length of pathlist=" + str(len(self.pathlist)))
logging.debug(str("value of pathlist[0]=" +
str(self.pathlist[0])))
model = self.treeview.get_model()
for x in self.pathlist:
iter = model.get_iter(x)
if iter != None :
print ("value or select store=" +
model.get_value(iter, 1))
def selecttest1(self, treeselection):
(model, self.pathlist) = treeselection.get_selected_rows()
logging.debug("lenght of pathlist=" + str(len(self.pathlist)))
def main():
gtk.main()
if __name__ == "__main__":
tvexample = BasicTreeViewExample()
main()
----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
_______________________________________________
pygtk mailing list [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/