• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

fnds

[Python] SimpleClock - Relógio que usa o Canvas do Tkinter

4 mensagens neste tópico

Este script cria um simples relógio ao estilo destes:

http://img526.imageshack.us/img526/2203/simpleclockprintfh7.png

http://img246.imageshack.us/img246/5456/simpleclockprintdarkbluep9.png

Como eu sei que isto não vai ser útil para ninguém, decidi comentar o código (apesar de pouco), coisa que raramente faço, para que percebe pouco de Tkinter, mais propriamente de Canvas, passe a perceber alguma coisa :P:D

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Coded by Fábio Domingues (fnds)

from Tkinter import *
import time, thread

tamanho = [240, 240]#Tamanho do relogio [altura, largura]

root = Tk()#Cria a janela
root.resizable(False, False)#Define se a janela pode ser redimensionada (altura, lagura)
root.title('[fnds3000] SimpleClock')#Titulo da janela

relogio = Canvas(root, width=tamanho[0], height=tamanho[1], bg='black')#Controi a tela de desenho
relogio.pack()#Mete-a na janela

relogio.create_oval(4, 4, int(relogio['width'])-1, int(relogio['height'])-1, width=4, outline='blue', fill='darkblue')#Desenha o circulo do relogio (fill=corFundo, outline=corBorda, width=espessura)

relogio.create_line(1+int(relogio['height'])/2, 3, 1+int(relogio['height'])/2, 18, width=4, fill='blue')#Desenha a linha 12h
relogio.create_line(1+int(relogio['height'])/2, int(relogio['width'])+1, 1+int(relogio['height'])/2, int(relogio['width'])-14, width=4, fill='blue')#Desenha a linha 6h
relogio.create_line(3, 1+int(relogio['width'])/2, 1+15, 1+int(relogio['width'])/2, width=4, fill='blue')#Desenha a linha 9h
relogio.create_line(int(relogio['height'])-1, 4+int(relogio['width'])/2, int(relogio['height'])-1-15, 4+int(relogio['width'])/2, width=4, fill='blue')#Desenha a linha 3h

def angulo(ponteiro):#Define o angulo que os ponteiros vao ter em funcao da hora actual
   if ponteiro == 'horas':
       return float(-(time.time()/3600-3)*360.0/12)
   elif ponteiro == 'minutos':
       return float(-(time.time()/60-15)*360.0/60)
   elif ponteiro == 'segundos':
       return float(-(time.time()-15)*360.0/60)
   else:
       return False

def ponteiros():#Actualiza a posicao os ponteiros
   relogio.delete('horas')#Elimina o ponteiro com a tag 'horas'
   relogio.create_arc(4+40, 2+40, int(relogio['width'])-1-40, int(relogio['height'])-40, start=angulo('horas'), extent=0, tag='horas', width=6, outline='yellow')#Desenha o ponteiro (seccao do circulo) na tela

   relogio.delete('minutos')
   relogio.create_arc(4+10, 2+10, int(relogio['width'])-1-10, int(relogio['height'])-10, start=angulo('minutos'), extent=0, tag='minutos', width=6, outline='orange')

   relogio.delete('segundos')
   relogio.create_arc(4+10, 2+10, int(relogio['width'])-1-10, int(relogio['height'])-10, start=angulo('segundos'), extent=0, tag='segundos', width=3, outline='red')

   relogio.delete('ponto')
   relogio.create_oval(int(relogio['width'])/2+2-5, int(relogio['height'])/2+2-5, int(relogio['width'])/2+2+5, int(relogio['height'])/2+2+5, fill='deepskyblue', width=0, tag='ponto')#Desenha o ponto central do relogio

ponteiros()

def actualiza():
   while True:
       time.sleep(0.1)#Espera para actualizar
       ponteiros()#Actualiza a posicao dos ponteiros

thread.start_new_thread(actualiza, tuple([]))#Cria uma nova thread para actualizar a posicao dos ponteiros

root.mainloop()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só te aconselho a uma coisa. Organiza o código por partes. Já que está tão bem comentado B) Aproveita para dividires o que é definição de GUI, o que é definição de horas, o que é execução de funções, etc.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora