2012-11-16 2 views
3

다른 스레드에서 메인 레이아웃을 수정하려고합니다. 그러나 함수 실행이() 호출되지 않습니다와 나는 오류가 있어요 :PyQt - 다른 스레드에서 GUI 수정

여기

QObject::setParent: Cannot set parent, new parent is in a different thread

내 코드입니다 : 정말 그것을 얻을하지 않습니다

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_()) 

을, 왜 너무 어렵다 PyQt로 GUI에 액세스 하시겠습니까? C#에는 Invoke가 있습니다. PyQt에 그런 종류의 것이 있습니까?

타이머를 사용하지 않고 MainWindow.__init__에서 직접 스레드를 만들려고했으나 작동하지 않았습니다.

답변

6

Qt에서 을 직접 시도하지 말아야합니다. GUI 스레드 외부에서 GUI를 업데이트하십시오.

대신, 스레드에서 신호를 내보내고 GUI 스레드 내에서 필요한 업데이트를 수행하는 슬롯에 연결하십시오.

Threads and QObjects에 관한 Qt 설명서를 참조하십시오.

관련 문제