2016-02-03 55 views
0

我正在pyqt4中编写一个应用程序,显示用户在主窗口上执行某些操作的剩余时间。我在Python 2.7中使用Qt5.5和pyqt4。pyqt4 - QTimer停止关闭按钮时

from PyQt4 import QtCore, QtGui 


class MainWin(QtGui.QMainWindow): 

    def __init__(self): 
     super(MainWin, self).__init__() 
     self.initUI() 
     self.time = 120 
     self.centralwidget = QtGui.QWidget(self) 
     self.lcdNumber = QtGui.QLCDNumber(self.centralwidget) 
     self.lcdNumber.setGeometry(QtCore.QRect(200, 170, 500, 550)) 
     self.displayTime() 
     self.setCentralWidget(self.centralwidget) 
     self.timer = QtCore.QTimer() 
     self.timer.timeout.connect(self.updateTime) 
     self.timer.start(1000) 

    def initUI(self): 
     self.resize(1100, 850) 
     # Do other stuff 
    def displayTime(self): 
     minute, sec = divmod(self.time,60) 
     self.lcdNumber.display('{}:{:02d}'.format(minute,sec)) 
    def updateTime(self): 
     self.time -= 1 
     self.displayTime() 
     if self.time == 0: 
      self.timer.stop() 

def main(): 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    mw = MainWin() 
    mw.show() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

这工作我预想的样子,但是当用户点击关闭按钮后没有释放它,他能停止计时,而他仍然可以看到什么是窗口。这个问题似乎只在Windows上。

+0

发布证明问题的[MCVE](http://stackoverflow.com/help/mcve)。 – ekhumoro

+0

我无法复制:我按住了关闭按钮,定时器继续运行。我在Linux上,PyQt 4.11.4 – Mel

+0

我也无法重现(在Linux上)。你有什么样的平台,你使用的是什么版本的Qt/PyQt? – ekhumoro

回答

0

根据这个Qt的论坛主题:

在Windows上,这是 “正常” 的行为。基本上,按住任何标题栏按钮会杀死所有事件处理,直到释放按钮。

建议使用线程而不是定时器。但在你的情况下,这可能无济于事,因为你需要发出一个信号来更新GUI,并且跨线程信号也需要一个正在运行的事件循环。

所以也许你应该使用带回调的pywin32timer来代替。