|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /usr/lib64/pygtk/2.0/demos/ |
Upload File : |
#!/usr/bin/env python
'''Tree View/Editable Cells
This demo demonstrates the use of editable cells in a GtkTreeView.
If you're new to the GtkTreeView widgets and associates, look into the
GtkListStore example first.'''
# pygtk version: Maik Hertha <maik.hertha@berlin.de>
import gobject
import gtk
# columns
(
COLUMN_NUMBER,
COLUMN_PRODUCT,
COLUMN_EDITABLE
) = range(3)
# data
articles = [
[ 3, "bottles of coke", True ],
[ 5, "packages of noodles", True ],
[ 2, "packages of chocolate chip cookies", True ],
[ 1, "can vanilla ice cream", True ],
[ 6, "eggs", True ]
]
class EditableCellsDemo(gtk.Window):
def __init__(self, parent=None):
gtk.Window.__init__(self)
try:
self.set_screen(parent.get_screen())
except AttributeError:
self.connect('destroy', lambda *w: gtk.main_quit())
self.set_title(self.__class__.__name__)
self.set_border_width(5)
self.set_default_size(320, 200)
vbox = gtk.VBox(False, 5)
self.add(vbox)
label = gtk.Label("Shopping list (you can edit the cells!)")
vbox.pack_start(label, False, False)
sw = gtk.ScrolledWindow()
sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
vbox.pack_start(sw)
# create model
model = self.__create_model()
# create tree view
treeview = gtk.TreeView(model)
treeview.set_rules_hint(True)
treeview.get_selection().set_mode(gtk.SELECTION_SINGLE)
self.__add_columns(treeview)
sw.add(treeview)
# some buttons
hbox = gtk.HBox(True, 4)
vbox.pack_start(hbox, False, False)
button = gtk.Button(stock=gtk.STOCK_ADD)
button.connect("clicked", self.on_add_item_clicked, model)
hbox.pack_start(button)
button = gtk.Button(stock=gtk.STOCK_REMOVE)
button.connect("clicked", self.on_remove_item_clicked, treeview)
hbox.pack_start(button)
self.show_all()
def __create_model(self):
# create list store
model = gtk.ListStore(
gobject.TYPE_INT,
gobject.TYPE_STRING,
gobject.TYPE_BOOLEAN
)
# add items
for item in articles:
iter = model.append()
model.set (iter,
COLUMN_NUMBER, item[COLUMN_NUMBER],
COLUMN_PRODUCT, item[COLUMN_PRODUCT],
COLUMN_EDITABLE, item[COLUMN_EDITABLE]
)
return model
def __add_columns(self, treeview):
model = treeview.get_model()
# number column
renderer = gtk.CellRendererText()
renderer.connect("edited", self.on_cell_edited, model)
renderer.set_data("column", COLUMN_NUMBER)
column = gtk.TreeViewColumn("Number", renderer, text=COLUMN_NUMBER,
editable=COLUMN_EDITABLE)
treeview.append_column(column)
# product column
renderer = gtk.CellRendererText()
renderer.connect("edited", self.on_cell_edited, model)
renderer.set_data("column", COLUMN_PRODUCT)
column = gtk.TreeViewColumn("Product", renderer, text=COLUMN_PRODUCT,
editable=COLUMN_EDITABLE)
treeview.append_column(column)
def on_add_item_clicked(self, button, model):
new_item = [0, "Description here", True]
articles.append(new_item)
iter = model.append()
model.set (iter,
COLUMN_NUMBER, new_item[COLUMN_NUMBER],
COLUMN_PRODUCT, new_item[COLUMN_PRODUCT],
COLUMN_EDITABLE, new_item[COLUMN_EDITABLE]
)
def on_remove_item_clicked(self, button, treeview):
selection = treeview.get_selection()
model, iter = selection.get_selected()
if iter:
path = model.get_path(iter)[0]
model.remove(iter)
del articles[ path ]
def on_cell_edited(self, cell, path_string, new_text, model):
iter = model.get_iter_from_string(path_string)
path = model.get_path(iter)[0]
column = cell.get_data("column")
if column == COLUMN_NUMBER:
articles[path][COLUMN_NUMBER] = int(new_text)
model.set(iter, column, articles[path][COLUMN_NUMBER])
elif column == COLUMN_PRODUCT:
old_text = model.get_value(iter, column)
articles[path][COLUMN_PRODUCT] = new_text
model.set(iter, column, articles[path][COLUMN_PRODUCT])
def main():
EditableCellsDemo()
gtk.main()
if __name__ == '__main__':
main()