タイマーを使用してストップウォッチを作成

LCD形式の時計を作成するのには、LCD Number widgetが使える。
このwidgetで時刻を表示する、ストップウォッチを作成してみる。タイマーと組み合わせて作成したコードは以下の通り。経過時刻を求めるために、QtCore.QTime.secsTo()を用いている。

import sys
from disptime import *

class MyForm(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

        QtCore.QObject.connect(self.ui.pushButtonStart, QtCore.SIGNAL('clicked()'), self.startDisplay)
        QtCore.QObject.connect(self.ui.pushButtonStop, QtCore.SIGNAL('clicked()'), self.stopDisplay)
        self.ui.pushButtonStop.setEnabled(False)

        self.time1 = None
        self.showlcd()

    def showlcd(self):  #LCD Number widgetの表示内容を更新
        if self.time1 != None:
      #現在時刻とボタンを押したときの時刻の差を秒で表示する
            time2 = QtCore.QTime(self.time1).secsTo(QtCore.QTime.currentTime())
            self.ui.lcdNumber.display(time2)

    def startDisplay(self): #スタートボタンを押したときの処理
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.showlcd)
        self.timer.start(1000)
        self.time1 = QtCore.QTime.currentTime() #ボタンを押したときの時間を記録

        self.ui.pushButtonStart.setEnabled(False)
        self.ui.pushButtonStop.setEnabled(True)

    def stopDisplay(self):
        self.timer.stop()  #タイマーを止める
        self.ui.pushButtonStart.setEnabled(True)
        self.ui.pushButtonStop.setEnabled(False)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyForm()
    myapp.show()
    sys.exit(app.exec_())

Designerでデザインした画面は以下のようになる。

実行例は下の通り。