我在pyqt4中编写一个应用程序,显示用户在主窗口上执行某些操作所需的剩余时间。我使用Qt5.5和pyqt4和python 2.7。
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 :(得分:0)
根据这个Qt论坛帖子:
这是"正常" Windows上的行为。基本上,按住任何标题栏按钮会杀死所有事件处理,直到按钮被释放。
建议使用线程代替计时器。但在你的情况下,这可能不会有帮助,因为你需要发出信号来更新GUI,而跨线程信号也需要一个运行的事件循环。