An event is often a collection of signals and certain conditions.
for eg.
A button emits a "clicked" event when the mouse button is clicked
The Mouse-down event fires the Mouse-down signal. The difference
here would be the user causes events, which emit signals, which are
handled by the application. But the application can fire signals
itself, without user input.
A signal is mainly a callback mechanism. It's a way
for one object to register it's interest in being notified of another
objects action or state change. You register your interest by providing
a callback, when the object "emits a signal" it simply iterates over the
list of callbacks which have been registered with it and calls the
callback passing some predefined data with it.
An event is an almost one-to-one mapping of window system events. Window
system events are things like "key press" or "window move". Window
system events are reported to the applications main loop. GDK/GTK
interprets the window system events passes them along to you.