Hola a todos(as)
Resulta que estoy tratando de hacer un contador que se muestre en formato hora, mi idea es no hacerlo tan complicado, pero como estoy trabajando en PyQT4 no sé si sea eso o porque se me han olvidado los bucles mas sencillos.
en fin
este es el código del programa.
#!/usr/bin/python
#-- coding: utf-8 --
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.lcd = QtGui.QLCDNumber(self)
self.lcd.setGeometry(30, 40, 200, 25)
self.btn = QtGui.QPushButton('Start', self)
self.btn.move(40, 80)
self.btn.clicked.connect(self.doAction)
self.timer = QtCore.QBasicTimer()
self.step = 0
self.setGeometry(300, 300, 280, 170)
self.setWindowTitle('QtGui.QLCDNumber')
self.show()
def timerEvent(self, e):
h = 0
m = 0
if self.step < 100:
if self.step < 60:
self.step = self.step + 1
self.lcd.display("%d:%d:%d" % (h,m,self.step))
if self.step >= 60:
m += 1
self.step = 0
self.lcd.display("%d:%d:%d" % (h,m,self.step))
if m >= 60:
h += 1
m = 0
self.lcd.display("%d:%d:%d" % (h,m,self.step))
def doAction(self):
if self.timer.isActive():
self.timer.stop()
self.btn.setText('Start')
else:
self.timer.start(10, self)
self.btn.setText('Stop')
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
En realidad lo que he tratado de modificar por todos lados es esta pequeña pero tediosa parte
def timerEvent(self, e):
h = 0
m = 0
if self.step < 100:
if self.step < 60:
self.step = self.step + 1
self.lcd.display("%d:%d:%d" % (h,m,self.step))
if self.step >= 60:
m += 1
self.step = 0
self.lcd.display("%d:%d:%d" % (h,m,self.step))
if m >= 60:
h += 1
m = 0
self.lcd.display("%d:%d:%d" % (h,m,self.step))
Ya que el contador comienza y cuando está en minuto 1, vuelve y se pone a 0, así esté bien el segundero
gracias
Hola! Acá te dejo el code funcionando. Le podrías agregar una opción para reiniciar el conteo si se desea ;).
#!/usr/bin/python
#-- coding: utf-8 --
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.lcd = QtGui.QLCDNumber(self)
self.lcd.setGeometry(30, 40, 200, 25)
self.btn = QtGui.QPushButton('Start', self)
self.btn.move(40, 80)
self.btn.clicked.connect(self.doAction)
self.timer = QtCore.QBasicTimer()
self.step = 0
self.s = 0
self.h = 0
self.m = 0
self.setGeometry(300, 300, 280, 170)
self.setWindowTitle('QtGui.QLCDNumber')
self.show()
def timerEvent(self, e):
if self.step >= 100:
self.step = 0
if self.s < 60:
self.s += 1
self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
else:
self.s = 0
if self.m < 60:
self.m += 1
self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
else:
self.m = 0
self.h += 1
self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
else:
self.step += 1
def doAction(self):
if self.timer.isActive():
self.timer.stop()
self.btn.setText('Start')
else:
self.timer.start(10, self)
self.btn.setText('Stop')
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Fijate que en tu code confundiste el step con el segundo, el segundo con el minuto y el minuto con la hora.
Además creaste las variables h y m dentro del método que ataja al evento, por lo que cada vez que aumentaba el valor de step, a h y m se les asignaba el valor 0.
Saludos!
WhiZ
EDITO: Ah! otra cosa. Como dijiste que lo querías en formato hora, el contador no tiene límite para la misma, es decir, no está configurado para reiniciar la variable hora cuando su valor supera los 24. Supuse que así lo querías, pero si lo querés cambiar sólo tenés que hacer lo mismo que veníamos haciendo para las centésimas, los segundos y los minutos.
gracias amigo
Si yo creo que el problema era definir las variables dentro del mismo método, algo me sospechaba
muchas gracias
jeje me cope y le agregué algunas cosas :)
#!/usr/bin/python
#-- coding: utf-8 --
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.lcd = QtGui.QLCDNumber(self)
self.lcd.setGeometry(30, 40, 200, 25)
self.lcd.display('0:0:0')
self.btnIniciar = QtGui.QPushButton('Start', self)
self.btnIniciar.move(28, 80)
self.btnIniciar.clicked.connect(self.doAction)
self.btnReiniciar = QtGui.QPushButton('Restart', self)
self.btnReiniciar.move(145, 80)
self.btnReiniciar.clicked.connect(self.restart)
self.timer = QtCore.QBasicTimer()
self.c = 0 # centésima
self.s = 0 # segundo
self.h = 0 # minuto
self.m = 0 # hora
self.setGeometry(550, 350, 260, 150)
self.setWindowTitle('QtGui.QLCDNumber')
self.show()
def timerEvent(self, e):
if self.c >= 100:
self.c = 0
if self.s < 60:
self.s += 1
self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
else:
self.s = 0
if self.m < 60:
self.m += 1
self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
else:
self.m = 0
self.h += 1
self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
else:
self.c += 1
def doAction(self):
if self.timer.isActive():
self.timer.stop()
self.btnIniciar.setText('Start')
else:
self.timer.start(10, self)
self.btnIniciar.setText('Stop')
def restart(self):
self.c = 0
self.s = 0
self.m = 0
self.h = 0
self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Saludos!
WhiZ