2016-06-09 2 views
-1

У меня есть проблема, на которую я не могу найти ответ.Сигнал PySide2 не попал между потоками с объектами

Я работаю над приложением GUI, разработанный в Python и его библиотека пользовательского интерфейса: PySide2 (Qt обертки для Python)

меня тяжелую функция вычисления я хочу поставить на другую нить, чтобы не замерзнуть мой пользовательский интерфейс. Ui должен показать «Загрузка», а когда функция закончена, получить от нее ее результаты и обновить интерфейс.

Я пробовал много разных кодов, много примеров работают на других, но не на меня, это ошибка PySide2? (Для Exemple это почти то, что я хочу сделать: Updating GUI elements in MultiThreaded PyQT)

Мой код:

class OtherThread(QThread): 

    def __init__(self): 
     QThread.__init__(self) 

    def run(self): 
     print 'Running......' 
     self.emit(SIGNAL("over(object)"), [(1,2,3), (2,3,4)]) 

@Slot(object) 
def printHey(obj): 
    print 'Hey, I\'ve got an object ', 
    print obj 

thr = OtherThread() 
self.connect(thr,SIGNAL("over(object)"),printHey) 
thr.start() 

Мой код работает, если я использовать примитивы, такие как bool или int, но не с объектом. Я вижу «Бег ...», но никогда не остальное.

Надежда кто-то может просветить меня

ответ

1

Вы не можете определить сигналы динамически на экземпляре класса. Они должны быть определены как атрибуты класса. Вы должны использовать new-style signals and slot syntax.

class OtherThread(QThread): 
    over = QtCore.Signal(object) 

    def run(self): 
     ... 
     self.over.emit([(1,2,3), (2,3,4)]) 


class MyApp(QtCore.QObject) 

    def __init__(self): 
     super(MyApp, self).__init__() 
     self.thread = OtherThread(self) 
     self.thread.over.connect(self.on_over) 
     self.thread.start() 

    @QtCore.Slot(object) 
    def on_over(self, value): 
     print 'Thread Value', value 
+0

Привет Большое спасибо, что я искал. Странно, что так я пробовал в первый раз, но это не сработало. Я должен был пропустить что-то, что я думаю x) –