The general steps to creating a widget in GTK are:
GObject | Gtk.Object +Gtk.Widget | +Gtk.Misc | | +Gtk.Label | | | `Gtk.AccelLabel | | +Gtk.Arrow | | `Gtk.Image | +Gtk.Container | | +Gtk.Bin | | | +Gtk.Alignment | | | +Gtk.Frame | | | | Gtk.AspectFrame | | | +Gtk.Button | | | | +Gtk.ToggleButton | | | | | `Gtk.CheckButton | | | | | `Gtk.RadioButton | | | | `Gt.kOptionMenu | | | +Gtk.Item | | | | +Gtk.MenuItem | | | | +Gtk.CheckMenuItem | | | | | `Gtk.RadioMenuItem | | | | +Gtk.ImageMenuItem | | | | +Gtk.SeparatorMenuItem | | | | `Gtk.TearoffMenuItem | | | +Gtk.Window | | | | +Gtk.Dialog | | | | | +Gtk.ColorSelectionDialog | | | | | +Gtk.FileSelection | | | | | +Gtk.FontSelectionDialog | | | | | +Gtk.InputDialog | | | | | `Gtk.MessageDialog | | | | `GtkPlug | | | +Gtk.EventBox | | | +Gtk.HandleBox | | | +Gtk.ScrolledWindow | | | `Gtk.Viewport | | +Gtk.Box | | | +Gtk.ButtonBox | | | | +Gtk.HButtonBox | | | | `Gtk.VButtonBox | | | +Gtk.VBox | | | | +Gtk.ColorSelection | | | | +Gtk.FontSelection | | | | `Gtk.GammaCurve | | | `Gtk.HBox | | | +Gtk.Combo | | | `Gtk.Statusbar | | +Gtk.Fixed | | +Gtk.Paned | | | +Gtk.HPaned | | | `Gtk.VPaned | | +Gtk.Layout | | +Gtk.MenuShell | | | +Gtk.MenuBar | | | `Gtk.Menu | | +Gtk.Notebook | | +Gtk.Socket | | +Gtk.Table | | +Gtk.TextView | | +Gtk.Toolbar | | `Gtk.TreeView | +Gtk.Calendar | +Gtk.DrawingArea | | `Gtk.Curve | +Gtk.Editable | | +Gtk.Entry | | `Gtk.SpinButton | +Gtk.Ruler | | +Gtk.HRuler | | `Gtk.VRuler | +Gtk.Range | | +Gtk.Scale | | | +Gtk.HScale | | | `Gtk.VScale | | `Gtk.Scrollbar | | +Gtk.HScrollbar | | `Gtk.VScrollbar | +Gtk.Separator | | +Gtk.HSeparator | | `Gtk.VSeparator | +Gtk.Invisible | +Gtk.Preview | `Gtk.ProgressBar +Gtk.Adjustment +Gtk.CellRenderer | +Gtk.CellRendererPixbuf | +Gtk.CellRendererText | +Gtk.CellRendererToggle +Gtk.ItemFactory +Gtk.Tooltips `Gtk.TreeViewColumn