this is using pygtk 2.3.91
There should be 1 row selected and I want the focus to be on list not the header.
Once the cursor moves into the window I want to be able to hit return and have
the callback function called.
Hi Mike,
I must admit that this is not as easy as I first taught. I tried to add
def on_sort_column_changed(self, widget):
self.treeView.get_selection().select_path((0,))but it selects the last column. Probably because this signal_handler is called before the sorting takes place. I both tried connect and connect_after, but none of them gave a good result. Maybe someone else knows how to solve this?
regards,
Toon
# # $Header: /data/myranch/cvs/myranch/code/lib/screen/widgets/list.py,v 1.9 2004/05/02 23:59:29 mike Exp $ # import gobject import gtk
class List:
def create_widget(self):
title_count = 0
cell_x = None
cell_y = None
cell_width = None
cell_height = None
self.select_path = None
sort_cell = None
title_list = []
self.column = []
type_list = []
row_max = 15
row_count = 15
scroll = gtk.ScrolledWindow()
scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
type_list.append(gobject.TYPE_STRING)
type_list.append(gobject.TYPE_STRING)
type_list.append(gobject.TYPE_STRING)
self.store = gtk.ListStore(*type_list)
self.store.connect_after("sort-column-changed", self.on_sort_column_changed)
tv = gtk.TreeView(self.store)
self.treeView = tv
tv.connect('row_activated', self.row_activated_event)
tv.set_rules_hint(gtk.TRUE)
tv.set_headers_clickable(gtk.TRUE)
selection = tv.get_selection()
selection.set_mode(gtk.SELECTION_BROWSE)
count = 0
for title in ('colum1', 'column 2', 'column 3'):
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn(title, renderer,
text=count)
self.column.append({})
self.column[count]['viewColumn'] = column
self.column[count]['columnID'] = count
column.set_resizable(gtk.TRUE)
column.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY)
column.set_clickable(gtk.TRUE)
column.set_sort_column_id(count)
column.set_reorderable(gtk.TRUE)
tv.append_column(column)
if cell_height == None:
(rectangle, cell_x, cell_y, cell_width, cell_height) = column.cell_get_size()
if sort_cell == None:
sort_cell = column
count += 1
self.store.append(['row 1 col 1', 'row 1 col 2', 'row 1 col 3'])
self.store.append(['row 2 col 1', 'row 2 col 2', 'row 2 col 3'])
self.store.append(['row 3 col 1', 'row 3 col 2', 'row 3 col 3'])
self.store.append(['row 4 col 1', 'row 4 col 2', 'row 4 col 3'])
self.store.append(['row 5 col 1', 'row 5 col 2', 'row 5 col 3'])
row_count = 5
scroll.add(tv)
# why 6 pixel in heading
scroll.set_size_request(-1, cell_height * (row_count+1) + 4)
self.treeView.show_all()
self.treeView.set_cursor_on_cell('0')
self.store.sort_column_changed()
sort_cell.clicked()
return scroll
def on_sort_column_changed(self, widget):
self.treeView.get_selection().select_path((0,))
def set_select_event(self, command):
self.select_command = command
def row_activated_event(self, treeview, path, view_column):
if self.select_command != None:
self.select_command()
def get_select_data(self):
select_model = self.treeView.get_selection()
(store, iter) = select_model.get_selected()
if iter == None:
return None
data = {}
columnID = 0
for column_data in self.config['column']:
if 'variable' in column_data:
data[column_data['variable']] = store.get_value(iter, columnID)
elif 'field' in column_data:
data[column_data['field']] = store.get_value(iter, columnID)
columnID += 1
return data
def print_event():
print 'select event called'
top_level = gtk.Window(gtk.WINDOW_TOPLEVEL)
my_list = List()
window = my_list.create_widget()
my_list.set_select_event(print_event)
top_level.add(window)
top_level.show_all()
gtk.main()
_______________________________________________ pygtk mailing list [EMAIL PROTECTED] http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
