Итак, я целый день выдергиваю свои волосы, и мне не хватает терпения.
В основном у меня есть программа pygtk, которая построена из поляны. В нижней части главного окна находится строка состояния, которую я использую для отображения ошибок использования, а также сообщения о состоянии подключенного оборудования, и они используют функции, указанные ниже. Поэтому все вызовы displayError исходят из моего объекта на основе взаимодействия с пользователем, и все они, похоже, работают. В тестировании я попытался сделать вызовы displayCurrent, и он также работает. Проблема возникает, когда аппаратный процесс пытается использовать displayCurrent. Система работает так, что одним из членов моего класса главного окна является объект интерфейса с оборудованием. Это отдельный процесс, использующий multiprocessing.Process, который отправляет сигнал каждый раз, когда получает данные, а данные являются сообщением для вывода. У кого-нибудь есть какие-либо идеи? Я буду рад объяснить что-нибудь более подробно, если это необходимо, это просто много кода для публикации, чтобы получить все детали.
def displayCurrent(self, message):
print message
if self.lastMess:
self.statusBar.remove(self.normalID, self.lastMess)
self.lastMess = self.statusBar.push(self.normalID, message)
def displayError(self, message, timeout = 5):
"""
Function that takes an error message and raises it to the user via the statusbar
timeout seconds later.
"""
print message
mess = self.statusBar.push(self.urgentID, message)
# clear statusbar
gobject.timeout_add_seconds(timeout, self.clearStatus, self.urgentID, mess)
def clearStatus(self, cID, mID):
#time.sleep(timeout)
self.statusBar.remove(cID, mID)
#print self.statusBar.remove_all(self.urgentID)
print 'popped'
return False