There's Glade which allows you to create your interface and callbacks to be saved in a file. Using the library GladeXML, you can essentially generate all the required code at runtime without all the maintainability woes of actual code being written to disk.
Edit: link: http://glade.gnome.org/