Archived:Construindo um Calendário em PySymbian Utilizando Canvas
Dados do artigo
Testado com
Aparelho(s): N73,N95
Compatibilidade
Plataforma(s): S60 3rd Edition, S60 5th Edition
Artigo
Palavras-chave: Calendar
Tradução:
Originado de Drawing a Calendar on PySymbian Canvas
Por thiagobrunoms
Última alteração feita por hamishwillee
em 19 Dec 2011
Contents |
Introdução
Este artigo mostra como desenhar um calendário em Python utilizando Canvas. O código abaixo foi escrito com a ferramenta mais simples de para dispositivos móveis, PyS60.
A aplicação utiliza os seguintes módulos:
- appuifw
- graphics
- e32
A seguinte função é utilizada para criar o calendário baseado em canvas:
- draw_screen():desenha a tela preta
- draw_text():escreve textos
- print_number: escreve os números
Os seguintes parâmetros foram utilizados no desenvolvimento deste exemplo. Eles são customizáveis.
- number_of_square: Inicializa o número da coluna
- number_of_lines: Inicializa o número da linha
- Horizontal_Separator: Separa os espaços entre as colunas
- Vertical_Separator: Sepera os espaços entre as linhas
Todas as funções e parâmetros são definidos com mais detalhes no código-fonte abaixo.
Código-fonte
O código do calendário está descrito abaixo
# import module
import appuifw,graphics,e32
# define color code
BLACK= (0,0,0)
RED=(255,0,0)
BLUE= (0,0,255)
GREEN=(0,255,0)
ORANGE= (255,127,0)
WHITE=(255,255,255)
global width,height
width=320
height=320
#Global variables
sqrt_x=width/16
sqrt_y=height/4
sqrt_width=30
sqrt_height=25
number_of_square=7
number_of_lines=6
Horizontal_Separator=3
Vertical_Separator=3
TextColor=RED
PrintNumber=WHITE
canvas=None
img=None
def handle_redraw(rect):
canvas.blit(img)
# exit function
def quit():
app_lock.signal()
#---------------------------
#desenha tela
#---------------------------
def draw_screen():
#Variáveis global para a interface
global canvas
#Cria uma instância de Canvas e seta-o como corpo da aplicação.
canvas = appuifw.Canvas(redraw_callback = handle_redraw,event_callback = None)
appuifw.app.body=canvas
#Seta a tela cheia
appuifw.app.screen = 'full'
appuifw.app.exit_key_handler=quit
#Variáveis global para a interface
global img
img = graphics.Image.new((canvas.size))
#Limpa a tela
img.clear(BLACK)
global x1,y1,x2,y2, sqrt_x, sqrt_y, sqrt_width, sqrt_height,number_of_square, Horizontal_Separator,Vertical_Separator,number_of_lines
j=0
while j<number_of_lines:
i=0
k=0
#define as coordenadas do retangulo
x1=sqrt_x
y1=sqrt_y+(j*(sqrt_height+Vertical_Separator))
x2=x1+sqrt_width
y2=y1+sqrt_height
while (i<number_of_square):
#draw rectangle
img.rectangle((x1+ (i*sqrt_width),y1,x2+ (i*sqrt_width)-Horizontal_Separator,y2),outline=BLUE)
i=i+1
handle_redraw(None)
j=j+1
Total_x, Total_y = canvas.size
img.text((35,50), u"Calendário", fill = BLUE,font=(u'Nokia Hindi S60',40,appuifw.STYLE_BOLD))
handle_redraw(None)
#define a função draw_text
def draw_text():
global sqrt_x,sqrt_y,t1,t2,sqrt_height,y3,x3, number_of_square
t1=5
t2=20
y3=sqrt_y+t2
i=1
a=[u'D',u'S',u'T',u'Q',u'Q',u'S',u'S']
while i< number_of_square +1:
# draw text on canvas
img.text(((sqrt_x+(i*t1)+((i-1)*sqrt_height)),y3), unicode(a[i-1]), fill=TextColor,font=(u'Nokia Hindi S60',20,appuifw.STYLE_BOLD))
i=i+1
handle_redraw(None)
def draw_number(i, no_of_days_in_month):
global number_of_lines, number_of_square
j=0
a=1
while j<(number_of_lines-1):
if i==number_of_square:
i=0
t1=5
x1=sqrt_x
y1=sqrt_y+((j+1)*sqrt_width)+14
while (i<number_of_square):
img.text((x1+ (i*sqrt_height)+((i+1)*t1),y1),unicode(a),fill=PrintNumber)
a=a+1
i=i+1
if a==no_of_days_in_month+1:
break
handle_redraw(None)
#a=a+1
j=j+1
#invocando as funções
draw_screen()
draw_text()
draw_number(3,31)
app_lock=e32.Ao_lock()
#Esperando o usuário sair da aplicação
app_lock.wait()

