Обе ваши проблемы связаны с использованием модального диалога. Вам лучше создать обычный диалог (не модальный) с только установленным атрибутом «остаться на вершине». В этом окне вы сможете изменять сообщения и даже закрывать их из другого процесса.
Вам нужно добавить «ответ» (или другое имя метода, если хотите) на кнопки:
self.stayOnTopWindowResponse = None
b = gtk.Button("Accept")
b.response = "Accept"
b.connect("clicked", self.accepted)
и в «принятой» подпрограмме (одна для всех кнопок) что-то вроде этого:
def accepted(self, widget):
self.stayOnTopWindowResponse = widget.response
self.stayOnTopWindow.close()
Я не проверял это, но оно должно работать.