Python: Cronometro (pyqt4 – python 2.6)
Para hacer un cronometro vamos a recurrir al timer de python.
Empezamos por definir nuestra interfaz con “Designer”, en el cual incluimos 3 botones, y 1 etiqueta, donde incluimos el evento de salir desde la misma interfáz, y nos quedaría como muestra la figura.

Una vez que compilamos nuestra interfáz con pyuic4 de la siguiente manera:
pyuic4 -o ui_clockwatch.py -x cronometro.ui
vamos a nuestra interfaz de desarrollo preferida y empezamos a escribir nuestro código.
Iniciamos con las importaciones, donde está nuestro interfaz que recién habíamos creado y en la segunda linea incluimos la codificación para la escritura y así no tener problemas con los acentos y las ñ.
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import sys from ui_clockwatch import Ui_watch from PyQt4 import QtCore, QtGui from PyQt4.QtGui import (QMessageBox, QMainWindow, QWidget, QApplication) from PyQt4.QtCore import (Qt, SIGNAL, pyqtSignature, QBasicTimer)
Creamos nuestra clase principal donde inicializamos las variables, creamos nuestro timer:
class Clock(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_watch()
self.ui.setupUi(self)
#Inicializo variables
self._start = 0.0
self._elapsedtime = 0.0
self._running = 0
self._setTime(self._elapsedtime)
#Creo mi Timer
self.timer = QtCore.QBasicTimer()
Defino los eventos de los botones:
@pyqtSignature("")
def on_btn_start_clicked(self):
try:
""" Iniciar cronometro, ignorar si se está ejecutando. """
if not self._running:
self._start = time.time() - self._elapsedtime
self._running = 1
self.timer.start(100, self)
self.ui.btn_start.setText("Detener")
else:
self.timer.stop()
self._elapsedtime = time.time() - self._start
self._setTime(self._elapsedtime)
self.ui.btn_start.setText("Continuar")
self._running = 0
except:
QMessageBox.warning(self, "Mensaje",
unicode("Error: Controlar el botón de inicio"))
@pyqtSignature("")
def on_btn_reset_clicked(self):
""" Reinicio mi cronometro. """
self._start = time.time()
self._elapsedtime = 0.0
self._setTime(self._elapsedtime)
Defino las funciones del timer y para configurar mi reloj:
def timerEvent(self, event):
try:
""" Actualizo la etiqueta con tiempo remanente. """
elap = time.time() - self._start
""" Configuro el string con Minutos, segundo y centesimas de seg. """
minutes = int(elap/60)
seconds = int(elap - minutes*60.0)
hseconds = int((elap - minutes*60.0 - seconds)*100)
self.ui.lb_watch.setText('%02d:%02d:%02d' % (minutes, seconds, hseconds))
# Paro mi reloj en 5 segundos
if seconds==5:
self.timer.stop()
# Corrijo los milisegundos
hseconds=00
self.ui.lb_watch.setText('%02d:%02d:%02d' % (minutes, seconds, hseconds))
except:
QMessageBox.warning(self, "Mensaje",
unicode("Error: Controlar timer"))
def _setTime(self, elap):
""" Configuro el string con Minutos, segundo y centesimas de seg. """
minutes = int(elap/60)
seconds = int(elap - minutes*60.0)
hseconds = int((elap - minutes*60.0 - seconds)*100)
self.ui.lb_watch.setText('%02d:%02d:%02d' % (minutes, seconds, hseconds))
y por último creo mi aplicación.
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = Clock()
myapp.show()
sys.exit(app.exec_())

Puedes ser el primero en comentar.