Как снять флажок, чтобы остановить бесконечное рисование в pyqt? - PullRequest
0 голосов
/ 19 ноября 2009

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

Таким образом, после входа в цикл программа зависает и больше не реагирует на мой сигнал «uncheck». Есть ли способ прервать этот цикл? Ниже приведен скелет связанного кода. Спасибо!

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 Ответ

1 голос
/ 19 ноября 2009

Вы не должны реализовывать это как цикл. Это определено для разрыва взаимодействия программы, так как предотвращает запуск «основного цикла» приложения Qt.

Поместите код рисования в обработчик событий (например, событие перерисовки) и используйте таймер для генерации событий через регулярные интервалы (например, 10 / с).

...