【问题标题】:How to uncheck a checkbox to stop infinite drawing in pyqt?如何取消选中复选框以停止 pyqt 中的无限绘图?
【发布时间】:2010-12-18 04:41:43
【问题描述】:

我的问题是,如果选中该复选框,我想继续旋转场景,并在取消选中后立即停止旋转。但是,“不停旋转”意味着无限循环……

所以在进入循环后,程序会被冻结,不再对我的“取消选中”信号做出反应。有没有办法中断这个循环?以下是相关代码的骨架。 谢谢!

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)

【问题讨论】:

    标签: python pyqt pyopengl


    【解决方案1】:

    您不能将其实现为循环。这是为了中断程序的交互,因为它会阻止 Qt 应用程序的“主循环”运行。

    将您的绘图代码放入事件处理程序(如重绘事件),并使用计时器以固定间隔(例如 10/s)生成事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-10
      • 2015-01-14
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      相关资源
      最近更新 更多