title: PyQT QGraphicScene move item in background thread
body: <p>Sorry for my bad english.
  I need update graphic scene in background thread. I need that the thread move my rectangle on scene. But it doesn't work, when threads start, rectagle is hides on scene, and i can't see his move. Only if i move by mouse on scene other object, i can see how my rectangle move. But if i change color of rectangle in thread, it work fine. I want make simple client-server game, but i don't understand how move objects on scene from thread. I know, that QGraphics Scene is not thread-safe object, but how can i move objects in background, without timer or events?</p>
  
  <pre><code>class MyGraphicRect2(QGraphicsItem):
      def __init__(self, x, y, width, height):
          super().__init__()
          self.x = x
          self.y = y
          self.width = width
          self.height = height
          self.setPos(self.x, self.y)
          self.color = QColor('red')
  
          # self.setToolTip('Test')
  
          self.setAcceptDrops(True)
          self.setCursor(Qt.OpenHandCursor)
          self.setFlag(QGraphicsItem.ItemIsSelectable, True)
          self.setFlag(QGraphicsItem.ItemIsMovable, True)
          self.setFlag(QGraphicsItem.ItemIsFocusable, True)
          self.setAcceptHoverEvents(True)
  
  
          s = Shadow()
          b = Blur()
          c = ColorChange()
          self.setGraphicsEffect(s)
          # self.setGraphicsEffect(c)
  
          # self.setGraphicsEffect(b)
  
      def setColor(self, color):
          self.color = QColor(color)
  
      def boundingRect(self):
          return QRectF(self.x, self.y, self.width, self.height)
  
      def paint(self, painter, options, widget):
          painter.setPen(QPen(QColor('black')))
          painter.setBrush(self.color)
          painter.drawRect(self.x, self.y, self.width, self.height)
  
  
  class MoveThread(QThread):
      def __init__(self,object,scene,view):
          super().__init__()
          self.object=object
          self.scene=scene
          self.view=view
      def run(self):
          for i in range(1,10):
              time.sleep(1)
              self.object.moveBy(30,0)
              print(self.object.pos().x())
              #self.object.update()
              self.view.updateSceneRect(QRectF(0,0,800,800))
  
  
           #for color in ['green','white','black','magenta','yellow']:
           #   time.sleep(1)
           #   self.object.setColor(color)
           #   self.object.update()
  
  
  class MyGraphicScene(QMainWindow):
      def __init__(self):
          super().__init__()
          self.rect=QRectF(0,0,800,800)
          self.Scene=QGraphicsScene(self.rect)
          self.View=QGraphicsView()
          self.View.setCacheMode(QGraphicsView.CacheNone)
          self.sceneConfig()
  
      def sceneConfig(self):
                           self.Scene.setBackgroundBrush(QBrush(QColor('yellow'),Qt.SolidPattern)))
  
      item=MyGraphicItem(30,30,100,100)
      self.item1=MyGraphicRect2(100,100,100,100)
      self.Scene.addItem(item)
      self.Scene.addItem(self.item1)
      line=QGraphicsLineItem(80,38,84,38)
      self.Scene.addItem(line)
      self.View.setScene(self.Scene)
  
  def displayUI(self):
      print('Is scene active', self.Scene.isActive())
      self.setCentralWidget(self.View)
      self.th=MoveThread(self.item1,self.Scene,self.View)
      self.th.start()
      self.resize(1000,1000)
      self.show()
  
  
  app=QApplication(sys.argv)
  
  m=MyGraphicScene()
  
  sys.exit(app.exec_())
  </code></pre>