2009-11-19 2 views
0

문제는 확인란을 선택하면 장면을 계속 회전시키고 선택을 취소하면 즉시이 회전을 멈추고 싶습니다. 그러나 "회전 유지"는 무한 루프를 의미합니다 ...pyqt에서 무한 도면을 중지하려면 확인란의 선택을 취소 하시겠습니까?

루프를 입력하면 프로그램이 정지되고 더 이상 내 "선택 취소"신호에 반응하지 않습니다. 이 루프를 방해 할 수있는 방법이 있습니까? 다음은 관련 코드의 골격입니다. 감사합니다.

class Draw(QGLWidget):  
    def __init__(...): 
     ... 
     self.rotate=0 
     self.auto=False 

    def paintGL(self): 
     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) 
     glLoadIdentity() 

     glRotatef(self.rotate,0.0,0.0,1.0) 
     draw stuff... 

     glFlush() 

    def autoRotate(self,auto): # auto is an integer and used here as true/false 
     self.auto=auto 
     while self.auto: 
      self.rotate+=0.5 
      if self.rotate>360: 
       self.rotate-=360 
      self.updateGL() 
      if auto==False: 
       break 


class SpiralWidgetDemo(QtGui.QMainWindow): 
    def __init__(self): 
     ... 
     auto=QtGui.QCheckBox("Auto") 
     self.connect(auto,QtCore.SIGNAL("stateChanged(int)"),widget.autoRotate) 

답변

1

루프로 구현하면 안됩니다. 이것은 Qt 애플리케이션의 "main loop"가 실행되는 것을 막기 때문에 프로그램의 상호 작용을 해치기 위해 정의됩니다.

그리기 코드를 이벤트 처리기 (예 : 다시 그리기 이벤트)에 넣고 일정한 간격 (예 : 10 초)으로 이벤트를 생성하는 타이머를 사용하십시오.

+0

귀하의 답변은 매우 정확하며 문제는 해결되었습니다. 고맙습니다! – mayasky