--- /dev/null
+#!/usr/bin/python
+import pygtk
+pygtk.require('2.0')
+import gtk
+
+class HelloWorld:
+
+ def hello(self, widget, data=None):
+ print "Hello World"
+
+ def delete_event(self, widget, event, data=None):
+ # If you return FALSE in the "delete_event" signal handler,
+ # GTK will emit the "destroy" signal. Returning TRUE means
+ # you don't want the window to be destroyed.
+ # This is useful for popping up 'are you sure you want to quit?'
+ # type dialogs.
+ print "delete event occurred"
+
+ # Change FALSE to TRUE and the main window will not be destroyed
+ # with a "delete_event".
+ return False
+
+ def destroy(self, widget, data=None):
+ print "destroy signal occurred"
+ gtk.main_quit()
+
+ def __init__(self):
+
+ gtk.rc_parse_string("style 'scroll' {\n"
+ " GtkRange::slider-width = 40\n"
+ "}\n"
+ "class 'GtkRange' style 'scroll'")
+
+ self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+
+ self.window.set_size_request(300, 200)
+
+
+ # When the window is given the "delete_event" signal (this is given
+ # by the window manager, usually by the "close" option, or on the
+ # titlebar), we ask it to call the delete_event () function
+ # as defined above. The data passed to the callback
+ # function is NULL and is ignored in the callback function.
+ self.window.connect("delete_event", self.delete_event)
+
+ # Here we connect the "destroy" event to a signal handler.
+ # This event occurs when we call gtk_widget_destroy() on the window,
+ # or if we return FALSE in the "delete_event" callback.
+ self.window.connect("destroy", self.destroy)
+
+ # Sets the border width of the window.
+ self.window.set_border_width(10)
+
+ vbox = gtk.VBox(False, 8)
+
+ sw = gtk.ScrolledWindow()
+ sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+ sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ #a = gtk.Adjustment(0, 100, 100, 0, 10, 10)
+ #sw.set_vadjustment()
+
+
+ vbox.pack_start(sw, True, True, 0)
+
+ data = [('fio fdkfdskajf jdkflasjkla', 'doldfsagfdas dlaskj', '212345'),
+ ('fdsafdsa dfasfasf dfasfdsa', 'fdsafaf fdafdas', '345678'),
+ ('fdsafdsa dfasfasf dfasfdsa', 'fdsafaf fdafdas', '345678'),
+ ('fdsafdsa dfasfasf dfasfdsa', 'fdsafaf fdafdas', '345678'),
+ ('fdsafdsa dfasfasf dfasfdsa', 'fdsafaf fdafdas', '345678'),
+ ('fdsafdsa dfasfasf dfasfdsa', 'fdsafaf fdafdas', '345678'),
+ ('fdsafdsa dfasfasf dfasfdsa', 'fdsafaf fdafdas', '345678'),
+ ('fdsafdsa dfasfasf dfasfdsa', 'fdsafaf fdafdas', '345678'),
+ ('fdsafdsa dfasfasf dfasfdsa', 'fdsafaf fdafdas', '345678'),
+ ('fdsafdsa dfasfasf dfasfdsa', 'fdsafaf fdafdas', '345678'),
+ ('fdsafdsa dfasfasf dfasfdsa', 'fdsafaf fdafdas', '345678'),
+ ('fdsafdsa dfasfasf dfasfdsa', 'fdsafaf fdafdas', '345678'),
+ ('fdas dafs fdsfasd ', 'fdasf dafa', '12435678')]
+ store = gtk.ListStore(str, str, str)
+ for d in data:
+ store.append([d[0], d[1], d[2]])
+
+ tree = gtk.TreeView(store)
+ tree.set_rules_hint(True)
+
+ t1 = gtk.CellRendererText()
+ column = gtk.TreeViewColumn("Name", t1, text=0)
+ column.set_sort_column_id(0)
+ tree.append_column(column)
+
+
+ t1 = gtk.CellRendererText()
+ column = gtk.TreeViewColumn("State", t1, text=1)
+ column.set_sort_column_id(1)
+ tree.append_column(column)
+
+
+ t1 = gtk.CellRendererText()
+ column = gtk.TreeViewColumn("Phone", t1, text=2)
+ column.set_sort_column_id(2)
+ tree.append_column(column)
+
+ sw.add(tree)
+
+ self.window.add(vbox)
+ self.window.show_all()
+
+
+ # and the window
+ self.window.show()
+
+ def main(self):
+ # All PyGTK applications must have a gtk.main(). Control ends here
+ # and waits for an event to occur (like a key press or mouse event).
+ gtk.main()
+
+if __name__ == "__main__":
+ hello = HelloWorld()
+ hello.main()
+