import gtk

class Example:
	def __init__(self):
		window = gtk.Window()
		self.window = window
		window.connect("destroy", lambda w: gtk.main_quit())
		window.set_default_size(400, 400)
		
		vbox = gtk.VBox()
		self.vbox = vbox
		vbox.set_homogeneous(True)
		vbox.set_spacing(5)
			
		for i in range(1,25):
			label = gtk.Label("Hello,there" + '1'*i)
			vbox.pack_start(label)

		layout = gtk.Layout()
		self.layout = layout
		layout.put(vbox, 0, 0)

		layout.add_events(gtk.gdk.BUTTON_RELEASE_MASK | gtk.gdk.BUTTON1_MOTION_MASK | gtk.gdk.POINTER_MOTION_HINT_MASK)
		layout.connect("button-press-event", self.pressCB)
		layout.connect("motion-notify-event", self.moveCB)
		layout.connect("button-release-event", self.releaseCB)
		
		self.dragging = False
		self.dragBeginPos = [0, 0]

		window.add(layout)
		window.show_all()
		
		layout.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND1))
		self.layout.set_size(self.vbox.allocation.width, self.vbox.allocation.height)

	def pressCB(self, widget, event):		#press callback funtion
		self.dragBeginPos = [event.x, event.y]
		self.dragging = True
		return True

	def moveCB(self, widget, event):
		if(self.dragging == True):
			dy = event.y - self.dragBeginPos[1]
			self.layout.window.scroll(0, int(dy))
		return True

	def releaseCB(self, widget, event):
		dragging = False

if  __name__ == "__main__":
	Example()
	gtk.main()
