У меня несколько странная проблема.Я кодирую многопоточное приложение и использую SIGNALS для передачи данных QThread в данные класса GUI.Без лишних слов, вот упрощенный код.
class GUI(uiMainWindow.MainWindow):
def __init__(self, parent=None):
super etc
self.thread = Thread()
self.connect(self.thread, SIGNAL("changeStatus(QString)"), self.setStatus, Qt.QueuedConnection)
def setStatus(self, status):
self.statusBar.setText(status)
class Thread(QThread):
def __init__(self, parent=None, create=True):
super etc
self.create = create
def run(self):
if self.create:
create_data()
if not self.create:
upload_data()
def create_data(self):
self.emit(SIGNAL("changeStatus(QString)"), "Changing the statusbar text")
#rest of the code
def upload_data(self):
self.emit(SIGNAL("changeStatus(QString)"), "Changing the statusbar text")
Довольно просто, верно?Однако вот в чем проблема: self.emit работает только в функции create_data, но не в upload_data (или, в этом отношении, в любой другой функции; я также пытался поместить ее в __init__
).Я попытался поместить print "I got the status" + status
в функцию setStatus.Опять же, это работает в функции create_data (), но не в функции upload_data ().
Различия между этими двумя функциями относительно незначительны, и, насколько я могу судить, ничто не мешает функции self.emit - фактически, в обоих случаях self.emit составляет всего 4-5 строк"подальше" от определения функции.
Это действительно озадачивает меня.Любая помощь?Заранее спасибо!
РЕДАКТИРОВАТЬ: опять же, насколько я могу судить, единственное различие между двумя функциями заключается в run () - первая вызывается, если для параметра create установлено значение True, а вторая -если это неверно