Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/05/2008, à 18:48

figarojuju

chronometre en python

Bonjour,
j'aimerai faire un petit chrono en python et qu'il affiche en très gros le résultat. Voila ce que j'ai fait:

import time

montemps=time.time()
while(1):
	y=time.time()-montemps
	time.sleep(5)
	print time.localtime(y)

C'est pas très joli...
Je ne connais pas bien les bibliothèques de python, auriez-vous une manière de faire en sorte que, au lieu d'avoir un 9-uplet, je n'ai que les minutes, secondes et affichées en très gros?

Merci et bonne soirée!


Ubuntu: Hardy Heron

Hors ligne

#2 Le 29/05/2008, à 20:40

Clop'

Re : chronometre en python

Bonjour,

Je pense que tu cherches la fonction time.strftime().

A utiliser de la manière suivante ( doc : http://docs.python.org/lib/module-time.html):

import time

montemps=time.time()
while(True):
    y=time.time()-montemps
    #time.sleep(5)
    print time.strftime('%M # %S ',time.localtime())

par contre pour le très gros.... aucune idée en console.. faudrait voir à faire une chtite boite de dialogue en Tkinter smile


EDIT :

J'ai jeté un oeil à Tkinter (dont je ne me rappellais pas grand chose... smile). Tu pourrais avoir un truc comme ça :

import Tkinter 


class Chrono(Tkinter.Label):
    def __init__(self,root,startTime=70):
        Tkinter.Label.__init__(self,root,text='Starting...')
        
        self.value=startTime
        self.font=('Helvetica', 36, 'normal')
        self.__setitem__('font',self.font)
        self.after(1000,self.count)
    
    def formatTime(self):
        return str(self.value/60)+': '+str(self.value%60)
    
    def count(self):
        self.value=self.value-1
        self.__setitem__('text',self.formatTime())
        self.after(1000,self.count)
        
if __name__=="__main__":
    
    root = Tkinter.Tk() 
    root.title('Chtit Chrono')
    label = Chrono(root,130)
    label.pack()
    root.mainloop()

C'est pas très joli, pas vraiment bien codé, mais ça a l'air de tourner smile
Il suffit de fournir le nombre de secondes à décompter vers la fin du fichier ( label = Chrono(root,130) ). Quant à la taille et à la police, tu peux modifier la ligne suivante :
self.font=('Helvetica', 36, 'normal')

Je ne sais pas vraiment quel nom de police sont dispo, c'est à googler et tester .



Voilà smile

Dernière modification par Clop' (Le 29/05/2008, à 21:18)


----------------------
Linux on the Root , un site qu'il fait bon feuilleter!
----------------------
PyQtRadio, un lecteur de webradio simple et léger! Installation multi-distrib'

Hors ligne

#3 Le 29/05/2008, à 21:58

arnaud_d

Re : chronometre en python

Arf Clop' tu as été plus rapide. big_smile

Ce n'est pas bien grave je suis aussi débutant donc ça m'a bien entrainé, voilà ce que j'avais fait :

#!/usr/bin/python
# -*- coding: utf-8 -*-

import time 
from Tkinter import *

def lancer_chrono():
    global depart,flag
    flag=1
    depart = time.time()
    top_horloge()

def stoper_chrono():
    global flag
    flag=0

def reset_chrono():
    global depart
    depart = time.time()

def top_horloge():
    global depart,flag
    y=time.time()-depart    
    minutes = time.localtime(y)[4]
    secondes = time.localtime(y)[5]
    if flag :
        message.configure(text = "%i min %i sec " %(minutes,secondes))
    fenetre.after(1000,top_horloge)


if __name__=="__main__":
    flag=0
    depart = 0
    fenetre=Tk()
    fenetre.title('Chronomètre')
    message = Label(fenetre,font=('sans', 20, 'bold'),text="Chrono prêt")
    message.grid(row=1)
    Button(fenetre,text='GO !',command=lancer_chrono).grid(row=2)
    Button(fenetre,text='STOP !',command=stoper_chrono).grid(row=3)
    Button(fenetre,text='RESET',command=reset_chrono).grid(row=4)
    fenetre.mainloop()

mon code est plus long que celui Clop', je vais regarder si je peux pas améliorer tout ça.

Voilà, merci pour l'exercice d'entrainement.

PS : si quelqu'un voit une grosse erreur, un truc à ne surtout par faire, je suis  ouvert aux critiques

Arnaud

Edit : probleme dans mon code, le bouton STOP ne marchait pas ! big_smile
Edit 2 : c'est bien de donner ses sources d'inspiration : http://www.daniweb.com/code/snippet552.html

PS : en parlant de Python, je fais un peu de pub pour mon topic parce que je suis toujours en galère : [Python] Déclencher évèvement sur modif d'un widget Entry

Dernière modification par arnaud_d (Le 29/05/2008, à 22:08)

Hors ligne

#4 Le 29/05/2008, à 22:41

Clop'

Re : chronometre en python

Re-bonsoir!

Je viens, de voir, d'après l'exemple d'Arnaud , que je m'était planté! Je t'ai fait un compte à rebours smile

Le changement n'est pas énorme, il suffit de remplacer le '-'dans count() par un '+' soit :

import Tkinter 


class Chrono(Tkinter.Label):
    def __init__(self,root,startTime=0):
        Tkinter.Label.__init__(self,root,text='Starting...')
        
        self.value=startTime
        self.font=('Helvetica', 36, 'normal')
        self.__setitem__('font',self.font)
        self.after(1000,self.count)
    
    def formatTime(self):
        return str(self.value/60)+': '+str(self.value%60)
    
    def count(self):
        self.value=self.value+1
        self.__setitem__('text',self.formatTime())
        self.after(1000,self.count)
        
if __name__=="__main__":
    
    root = Tkinter.Tk() 
    root.title('Chtit Chrono')
    label = Chrono(root)

( J'ai aussi changé la valeur par défaut qui devenait inutile smile)

Par rapport au code d'Arnaud, si je suis plus court, c'est que j'utilise un raccourci... Plutôt que de calculer le temps à afficher à partir du temps local et d'un temps compté au lancement, je lance une fonction toutes les secondes grâce à une fonction intégrée de Tkinter...


EDIT pour réponse au PS d'Arnaud : Va faire un tour sur ton post smile

Dernière modification par Clop' (Le 29/05/2008, à 22:42)


----------------------
Linux on the Root , un site qu'il fait bon feuilleter!
----------------------
PyQtRadio, un lecteur de webradio simple et léger! Installation multi-distrib'

Hors ligne

#5 Le 30/05/2008, à 11:50

figarojuju

Re : chronometre en python

Tout d'abord merci à tous les deux, si vous étiez dans la région de Chambéry, je vous paierai volontiers un coup à boire, parce que là, vu la rapidité de votre intervention, Chapeau!!!
Merci beaucoup, j'étudie votre code et à bientôt!


Ubuntu: Hardy Heron

Hors ligne

#6 Le 30/05/2008, à 13:38

arnaud_d

Re : chronometre en python

Arf, je suis un peu loin, mais ça aurait été avec plaisir... Cependant si tu montes au Danemark, passe boire une Carlsberg lol

Dernière modification par arnaud_d (Le 30/05/2008, à 13:39)

Hors ligne

#7 Le 15/05/2015, à 13:16

effects33

Re : chronometre en python

Moi aussi j'ai pas réussi à faire un chronomètre mais j'ai réussi a faire un montre.

from turtle import *
from datetime import datetime

def jump(distanz, winkel=0):
    penup()
    right(winkel)
    forward(distanz)
    left(winkel)
    pendown()

def hand(laenge, spitze):
    fd(laenge*1.15)
    rt(90)
    fd(spitze/2.0)
    lt(120)
    fd(spitze)
    lt(120)
    fd(spitze)
    lt(120)
    fd(spitze/2.0)

def make_hand_shape(name, laenge, spitze):
    reset()
    jump(-laenge*0.15)
    begin_poly()
    hand(laenge, spitze)
    end_poly()
    hand_form = get_poly()
    register_shape(name, hand_form)

def clockface(radius):
    reset()
    pensize(7)
    for i in range(60):
        jump(radius)
        if i % 5 == 0:
            fd(25)
            jump(-radius-25)
        else:
            dot(3)
            jump(-radius)
        rt(6)

def setup():
    global second_hand, minute_hand, hour_hand, writer
    mode("logo")
    make_hand_shape("second_hand", 125, 25)
    make_hand_shape("minute_hand",  130, 25)
    make_hand_shape("hour_hand", 90, 25)
    clockface(160)
    second_hand = Turtle()
    second_hand.shape("second_hand")
    second_hand.color("gray20", "gray80")
    minute_hand = Turtle()
    minute_hand.shape("minute_hand")
    minute_hand.color("blue1", "red1")
    hour_hand = Turtle()
    hour_hand.shape("hour_hand")
    hour_hand.color("blue3", "red3")
    for hand in second_hand, minute_hand, hour_hand:
        hand.resizemode("user")
        hand.shapesize(1, 1, 3)
        hand.speed(0)
    ht()
    writer = Turtle()
    #writer.mode("logo")
    writer.ht()
    writer.pu()
    writer.bk(85)

def wochentag(t):
    wochentag = ["Lundi", "Mardi", "Mercredi",
        "Jeudi", "Vendredi", "Samedi", "Dimanche"]
    return wochentag[t.weekday()]

def datum(z):
    monat = ["Janvier /", "Fevrier /", "Mars /", "Avril /", "Mai /", "Juin /",
             "Juillet /", "Août /", "Septembre /", "Octobre/", "Novembre /", "Decembre /"]
    j = z.year
    m = monat[z.month - 1]
    t = z.day
    return "%s %d %d" % (m, t, j)

def tick():
    t = datetime.today()
    sekunde = t.second + t.microsecond*0.000001
    minute = t.minute + sekunde/60.0
    stunde = t.hour + minute/60.0
    try:
        tracer(False)  # Terminator can occur here
        writer.clear()
        writer.home()
        writer.forward(65)
        writer.write(wochentag(t),
                     align="center", font=("Courier", 14, "bold"))
        writer.back(150)
        writer.write(datum(t),
                     align="center", font=("Courier", 14, "bold"))
        writer.forward(85)
        tracer(True)
        second_hand.setheading(6*sekunde)  # or here
        minute_hand.setheading(6*minute)
        hour_hand.setheading(30*stunde)
        tracer(True)
        ontimer(tick, 100)
    except Terminator:
        pass  # turtle user pressed STOP

def main():
    tracer(False)
    setup()
    tracer(True)
    tick()
    return "Aurevoir!! Ha! Ha!"

if __name__ == "__main__":
    mode("logo")
    msg = main()
    print(msg)
    mainloop()

input()

Hors ligne

#8 Le 15/05/2015, à 13:17

effects33

Re : chronometre en python

from turtle import *
from datetime import datetime

def jump(distanz, winkel=0):
    penup()
    right(winkel)
    forward(distanz)
    left(winkel)
    pendown()

def hand(laenge, spitze):
    fd(laenge*1.15)
    rt(90)
    fd(spitze/2.0)
    lt(120)
    fd(spitze)
    lt(120)
    fd(spitze)
    lt(120)
    fd(spitze/2.0)

def make_hand_shape(name, laenge, spitze):
    reset()
    jump(-laenge*0.15)
    begin_poly()
    hand(laenge, spitze)
    end_poly()
    hand_form = get_poly()
    register_shape(name, hand_form)

def clockface(radius):
    reset()
    pensize(7)
    for i in range(60):
        jump(radius)
        if i % 5 == 0:
            fd(25)
            jump(-radius-25)
        else:
            dot(3)
            jump(-radius)
        rt(6)

def setup():
    global second_hand, minute_hand, hour_hand, writer
    mode("logo")
    make_hand_shape("second_hand", 125, 25)
    make_hand_shape("minute_hand",  130, 25)
    make_hand_shape("hour_hand", 90, 25)
    clockface(160)
    second_hand = Turtle()
    second_hand.shape("second_hand")
    second_hand.color("gray20", "gray80")
    minute_hand = Turtle()
    minute_hand.shape("minute_hand")
    minute_hand.color("blue1", "red1")
    hour_hand = Turtle()
    hour_hand.shape("hour_hand")
    hour_hand.color("blue3", "red3")
    for hand in second_hand, minute_hand, hour_hand:
        hand.resizemode("user")
        hand.shapesize(1, 1, 3)
        hand.speed(0)
    ht()
    writer = Turtle()
    #writer.mode("logo")
    writer.ht()
    writer.pu()
    writer.bk(85)

def wochentag(t):
    wochentag = ["Lundi", "Mardi", "Mercredi",
        "Jeudi", "Vendredi", "Samedi", "Dimanche"]
    return wochentag[t.weekday()]

def datum(z):
    monat = ["Janvier /", "Fevrier /", "Mars /", "Avril /", "Mai /", "Juin /",
             "Juillet /", "Août /", "Septembre /", "Octobre/", "Novembre /", "Decembre /"]
    j = z.year
    m = monat[z.month - 1]
    t = z.day
    return "%s %d %d" % (m, t, j)

def tick():
    t = datetime.today()
    sekunde = t.second + t.microsecond*0.000001
    minute = t.minute + sekunde/60.0
    stunde = t.hour + minute/60.0
    try:
        tracer(False)  # Terminator can occur here
        writer.clear()
        writer.home()
        writer.forward(65)
        writer.write(wochentag(t),
                     align="center", font=("Courier", 14, "bold"))
        writer.back(150)
        writer.write(datum(t),
                     align="center", font=("Courier", 14, "bold"))
        writer.forward(85)
        tracer(True)
        second_hand.setheading(6*sekunde)  # or here
        minute_hand.setheading(6*minute)
        hour_hand.setheading(30*stunde)
        tracer(True)
        ontimer(tick, 100)
    except Terminator:
        pass  # turtle user pressed STOP

def main():
    tracer(False)
    setup()
    tracer(True)
    tick()
    return "Aurevoir!! Ha! Ha!"

if __name__ == "__main__":
    mode("logo")
    msg = main()
    print(msg)
    mainloop()

input()

Hors ligne

#9 Le 15/05/2015, à 13:19

effects33

Re : chronometre en python

comment vous faites pour mettre sur un carré noir

Hors ligne

#10 Le 15/05/2015, à 13:52

Compte anonymisé

Re : chronometre en python

effects33 a écrit :

comment vous faites pour mettre sur un carré noir

Ecrire son message entre les balises

[code]Ton texte dans un carré noir[/code]

Ou appuyer sur <> pour avoir ces balises.