2016-02-03 80 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來代替。