Thanks to Alessandro Decina for giving me an answer on this one!
Basically, it wasn't working as add_signal_watch()
adds a watch to the bus allowing GLib main loop to check the bus for new messages, which I hadn't implemented. Therefore to get this to work, I simply added:
gobject.MainLoop().run()
As an alternative to this I could have checked the bus for messages manually using:
bus.peek()
or
bus.poll(events, timeout)