PyQt - изменить графический интерфейс из другого потока
Я пытаюсь изменить мой основной макет из другого потока. Но функция run () никогда не вызывается и ям с ошибкой:
QObject :: setParent: невозможно установить родителя, новый родитель находится в другом потоке
Вот'мой код:
class FeedRetrievingThread(QtCore.QThread):
def __init__(self, parent=None):
super(FeedRetrievingThread, self).__init__(parent)
self.mainLayout = parent.mainLayout
def run(self):
# Do things with self.mainLayout
class MainWindow(QtGui.QDialog):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.mainLayout = QtGui.QGridLayout()
self.setLayout(self.mainLayout)
self.feedRetrievingThread = FeedRetrievingThread(self)
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.updateFeed)
self.timer.start(1000)
def updateFeed(self):
if not self.feedRetrievingThread.isRunning():
print 'Running thread.'
self.feedRetrievingThread.start()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
Я действительно нене понимаю, почему так сложно получить доступ к GUI через PyQt? В C # у вас есть Invoke. Есть ли что-то подобное в PyQt?
Я пытался создать поток непосредственно изMainWindow.__init__
(без использования таймера), но это нетоже не работает.