--- ttt1.py~ 2003-12-15 09:00:38.000000000 -0800
+++ ttt1.py 2003-12-15 09:05:26.000000000 -0800
@@ -23,13 +23,15 @@
model, row = view.get_selection().get_selected()
print model.get_value(row,0).name, model.get_value(row,0).surname+global view
def change(button, people):
"""Swap name and surname of all people"""
for i in people:
tmp=i.name
i.name=i.surname
i.surname=tmp
-
+ view.queue_draw()
+ if __name__=='__main__':
# some data to fill the listview
Emanuele Olivetti wrote:
Hi, I'm writing a set of examples for basic use of TreeView widget for those who only need to manage lists (and not trees). Here in the following there is an example wich shows a cryptic behaviour: a list of items is shown (names, surnames) and when you click the button name and surname should swap; the strange thing is about the update of the view that is executed in a further moment, only when you force it (window resize, mouse pointer over the list items, click in the list, etc.).
Why the update is delayed? How can I solve the problem in the Right Way (TM)? (there are some dirty hacks, but they are not good to show in an example)
Thanks in advance,
Emanuele
----- example2.2.py -----
import gtk
class Person(object): """A simple class""" def __init__(self, name="unknown", surname="unknown"): self.name=name self.surname=surname
def getname(treeview, cell, model, row): """Get name from the selected item of the list""" name=model.get_value(row,0).name cell.set_property("text", name) return
def getsurname(treeview, cell, model, row): """Get surnname from the selected item of the list""" surname=model.get_value(row,0).surname cell.set_property("text", surname) return
def action(*args): """Action to perform when an item of the list is selected""" model, row = view.get_selection().get_selected() print model.get_value(row,0).name, model.get_value(row,0).surname
def change(button, people): """Swap name and surname of all people""" for i in people: tmp=i.name i.name=i.surname i.surname=tmp
if __name__=='__main__':
# some data to fill the listview people=[Person("Emanuele","Olivetti"),Person("Laura","Gatti"),Person("Richard","Stallman")]
# define a model with with only 1 column (object) model = gtk.ListStore(object)
# fill the model with the people for i in people: row=model.append() model.set_value(row, 0, i)
# create a view based on the model view = gtk.TreeView(model)
# create a text renderer to render the text renderer = gtk.CellRendererText()
# create two columns based on name/surname data column0 = gtk.TreeViewColumn("Name", renderer) column0.set_cell_data_func(renderer, getname) column1 = gtk.TreeViewColumn("Surname", renderer) column1.set_cell_data_func(renderer, getsurname)
# append column to the view view.append_column(column0) view.append_column(column1)
# connect the signal "cursor-changed" to 'action' function view.connect('cursor-changed',action)
# ListView ends here. Adding horizontal and vertical scroll bars
sw=gtk.ScrolledWindow()
sw.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
sw.add(view)
# Preparing a new button: b=gtk.Button() b.set_label("change!") b.connect("clicked",change,people)
# putting everything in horizontal box to add a button hb=gtk.HBox() hb.add(sw) hb.add(b)
# Now we need a window to insert everything...
# create a window, insert the view, associate the 'mainquit' function # to the "destroy" signal and show all win = gtk.Window(gtk.WINDOW_TOPLEVEL) win.add(hb) win.connect("destroy", gtk.mainquit) win.show_all()
# go... 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/
_______________________________________________ pygtk mailing list [EMAIL PROTECTED] http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
