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

mariogouveia1

Problema!!!

14 mensagens neste tópico

Boas! pessoal eu tenho que colocar num programa um alarme... em que eu poça definir de quanto em quanto tempo ele reage...

o reagir pode ser com uma mensagem no ecrã ou mesmo so um som... mas preciso de um alarme...

ouvi dizer que era com um wxtimer mas não sei como e nem sei se é mesmo este... alguém pode dar uma ajuda?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tanto podes ter um wxtimer (não sei se existe) como uma simples função sleep a correr em multi-threading. Ou seja, tens uma função alarme que recebe o tempo em segundos e depois faz um sleep(segundos) e depois desse sleep têm o som ou mensagem no ecrã.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e seria possível enviar um exemplo? é que não estou a ver como fazê-lo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o sleep estive agora mesmo a analizar e não serve para o que eu preciso... por isso peço ajuda no wxtimer... pelo menos um exemplo... porque o meu programa tem uma parte designada de tarefas onde o utilizador define o tempo (diariamente, semanalmente, mensalmente ou anulamente) em horas e depois e para fazer algo...

Por favor uma ajudinha!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok... eu dou o que já fiz... pode ser que assim entendam o que preciso!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

class Nova (wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(600, 600))
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "select * from categorias;"
        cursor.execute(sql)
        resultado = cursor.fetchall()
        cursor.close()
        self.connect.close()
        self.categorias=[]
        self.id_cat=[]
        for i in resultado:
            self.id_cat.append(i)
            self.categorias.append(i[1])
        
        
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        sizer=wx.GridBagSizer(13,9)
        sizer.Add(wx.StaticText(self,-1, "Texto"), (1,0), (1,1), wx.ALIGN_LEFT)
        self.texto=wx.TextCtrl(self,-1, "")
        sizer.Add(self.texto, (1,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self,-1, "Descricao"), (2,0), (1,1), wx.ALIGN_LEFT)
        self.descricao=wx.TextCtrl(self,-1, "")
        sizer.Add(self.descricao, (2,1), (1,1), wx.EXPAND)
        
               
        sizer.Add(wx.StaticText(self, -1, "Categoria"), (3,0), (1,1), wx.ALIGN_LEFT)
        self.categoria=wx.ComboBox(self, -1, choices=self.categorias)
        sizer.Add(self.categoria, (3,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Data Inicio"), (4,0), (1,1), wx.ALIGN_LEFT)
        self.dt_inicio=wx.TextCtrl(self, -1, "0000-00-00")
        sizer.Add(self.dt_inicio, (4,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Data Fim"), (5,0), (1,1), wx.ALIGN_LEFT)
        self.dt_fim=wx.TextCtrl(self, -1, "0000-00-00")
        sizer.Add(self.dt_fim, (5,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Hora Inicio"), (6,0), (1,1), wx.ALIGN_LEFT)
        self.hr_inicio=wx.TextCtrl(self, -1, "00:00:00")
        sizer.Add(self.hr_inicio, (6,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Hora Fim"), (7,0), (1,1), wx.ALIGN_LEFT)
        self.hr_fim=wx.TextCtrl(self, -1, "00:00:00")
        sizer.Add(self.hr_fim, (7,1), (1,1), wx.EXPAND)
     
        sizer.Add(wx.Button(self, 3000, "Inserir"), (9,0), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 2000, "Terminar"), (10,1), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 1000, "Alarme"), (9,1), (1,1), wx.EXPAND)
        sizer.AddGrowableRow(6)
        sizer.AddGrowableCol(6)
        self.SetSizerAndFit(sizer)
        self.Centre()
        self.Bind(wx.EVT_BUTTON, self.Inserir, id=3000)
        self.Bind(wx.EVT_BUTTON, self.Terminar, id=2000)
        self.Bind(wx.EVT_BUTTON, self.Alarme, id=1000)

    def buscar(self):
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.conn = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        
        texto=self.texto.GetValue()
        descricao=self.descricao.GetValue()
        seleccao=self.categoria.GetValue()
        for i in self.id_cat:
            if seleccao==i[1]:
                categoria=i[0]
        dt_inicio=self.dt_inicio.GetValue()
        dt_fim=self.dt_fim.GetValue()
        hr_inicio=self.hr_inicio.GetValue()
        hr_fim=self.hr_inicio.GetValue()
        alarme=vg.alarme
        horas=vg.hora
        if alarme==0:
            alarme=''
        return texto, descricao, categoria, alarme, dt_inicio, dt_fim, hr_inicio, hr_fim, horas
    
    def Inserir (self, evt):
        texto, descricao, categoria, alarme, dt_inicio, dt_fim, hr_inicio, hr_fim, horas = self.buscar()
        sql = "CALL `agenda`.`inserir_tarefas`('"+str(texto)+"','"+str(descricao)+"',0,"+str(categoria)+",'"+str(alarme)+"','"+str(dt_inicio)+"','"+str(dt_fim)+"','"+str(hr_inicio)+"','"+str(hr_fim)+"',0,'"+str(horas)+"',0);"
        cursor = self.conn.cursor()
        cursor.execute(sql)
        self.conn.commit()
        cursor.execute("select * from tarefas;")
        cursor.close()
        self.conn.close()
        self.Close()
    def Terminar (self, evt):
        self.Close()
        
    def Alarme (self, evt):
        frame = Alarme(None, -1, u"Agenda:..Tarefas:..Nova Tarefa:..Alarme:..")
        frame.Show(True)

class Alarme (wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, size=(450,450))
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        
        panel = wx.Panel(self, -1)
        self.rb1 = wx.RadioButton(panel, -1, 'Sem Alarme', (150, 30), style=wx.RB_GROUP)
        self.texto = wx.StaticText(panel, -1, 'Com Alarme: ', (150, 70))

        self.rb3 = wx.RadioButton(panel, -1, 'Diario', (200, 90))
        self.rb4 = wx.RadioButton(panel, -1, 'Semanal', (200, 110))
        self.rb5 = wx.RadioButton(panel, -1, 'Mensal', (200, 130))
        self.rb6 = wx.RadioButton(panel, -1, 'Anual', (200, 150))
        self.texto2 = wx.StaticText(panel, -1, 'A que horas: ', (200, 190))
        self.horas = wx.TextCtrl(panel, -1, '', (300, 190))
        self.botao = wx.Button(panel, 100, 'Aceitar Valores', (200, 310))
        self.Bind(wx.EVT_RADIOBUTTON, self.Aceitar, id=self.rb1.GetId())
        self.Bind(wx.EVT_RADIOBUTTON, self.Aceitar, id=self.rb3.GetId())
        self.Bind(wx.EVT_RADIOBUTTON, self.Aceitar, id=self.rb4.GetId())
        self.Bind(wx.EVT_RADIOBUTTON, self.Aceitar, id=self.rb5.GetId())
        self.Bind(wx.EVT_RADIOBUTTON, self.Aceitar, id=self.rb6.GetId())
        self.Bind(wx.EVT_BUTTON, self.Aceitar, id=100)
        self.Aceitar(False)
        self.Centre()
        
        #guardar dados numa lista pra depois ser returnada e depois juntar a resposta do alarme e devolver as tarefas...
            
    def Aceitar (self, evt):
        sem=self.rb1.GetValue()
        diario=self.rb3.GetValue()
        semanal=self.rb4.GetValue()
        mensal=self.rb5.GetValue()
        anual=self.rb6.GetValue()
        self.hora=self.horas.GetValue()
        if sem==True:
            vg.alarme=0   #vg e' uma variavel global
            vg.hora=''            
        if diario==True:
            vg.alarme=1
            vg.hora=self.hora
        if semanal==True:
            vg.alarme=2
            vg.hora=self.hora
        if mensal==True:
            vg.alarme=3
            vg.hora=self.hora
        if anual ==True:
            vg.alarme=4
            vg.hora=self.hora   

agora com o valor que recebo quero então poder apresentar uma mensagem, um aviso, algo que diga ao utilizador que se passa algo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Atenção, não percebi como é que está o programa porque não meteste o código TODO. É preciso o main, os imports, as definições globais, etc. Como não pude ver a GUI e não vou tentar adivinhar ou ler código, meto-te um caso geral...

from time import sleep
import wx

def timer(self):
    sleep(TEMPO_ESPERAR_ATÉ_DATA_DO_ALARME)
    wx.MessageDialog(self,"ALARME",'MessageDialog')

e depois chamas assim:

from thread import start_new_thread as nthread

nthread(timer,())

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

afinal eu não consegui!

por isso aqui esta todo o meu codigo:

#!/usr/bin/evn python
#coding: utf-8
# encoding: utf-8
#py2exe

import wx
import datetime
import time
import string
import wx.calendar as cal
import MySQLdb
import Image
import _mysql
import os, sys
import UserControl_Data
from time import sleep



class Acesso(wx.Frame): 
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self,parent,id,title, size=(400, 185))
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        
        self.CreateStatusBar()
        self.SetStatusText(u"Confirme entrada na Agenda")
        self.user=wx.TextCtrl(self,-1,'',style=wx.TE_LEFT)
        self.pw=wx.TextCtrl(self,-1,'',style=wx.TE_LEFT|wx.TE_PASSWORD)
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        
    
        
        gride= wx.GridBagSizer(2,7)
        gride.Add(wx.StaticText(self,-1,u'Username: '),(1,0),(1,1),wx.ALIGN_LEFT)
        gride.Add(wx.StaticText(self,-1,u'Password: '),(2,0),(1,1),wx.ALIGN_LEFT)
        gride.Add(self.user,(1,1),(1,1),wx.EXPAND)
        gride.Add(self.pw,(2,1),(1,1),wx.EXPAND)
        gride.Add(wx.Button(self,20,u'Criar Conta'),(4,0),(1,1),wx.ALIGN_RIGHT)
        gride.Add(wx.Button(self,10,u'Entrar'),(4,1),(1,1),wx.ALIGN_RIGHT)
        gride.Add(wx.Button(self, 30, u'Sair'), (5,1), (1,1), wx.ALIGN_RIGHT)
        gride.AddGrowableCol(1)
        gride.AddGrowableRow(5)
        self.SetSizerAndFit(gride)
        self.Bind(wx.EVT_BUTTON, self.Entrar, id=10)
        self.Bind(wx.EVT_BUTTON, self.CriarConta, id=20)
        self.Bind(wx.EVT_BUTTON, self.Sair, id=30)
        self.Center()
    
    def Entrar(self,event):
        cursor = self.connect.cursor()
        sql = "select nome_utilizador, palavra_passe, del from utilizador;"
        cursor.execute(sql)
        resultado = cursor.fetchall()
        cursor.close()
        self.connect.close()
        self.erro=1
        for i in resultado:
            if i[2]==0:
                self.realname=i[0]
                self.realpw=i[1]
                dadosactual=(self.user.GetValue(),self.pw.GetValue())
                dadosreal=(self.realname,self.realpw)
                if dadosactual == dadosreal:
                    self.Close()            
                    inserirdados = Principal(None, -1, u"Agenda:..")
                    inserirdados.Show(True)
    
    def CriarConta (self, evt):
        frame = CriarConta(None, -1, u"Agenda:.. Criar Conta... ")
        frame.Show(True)
    
    def Sair (self, evt):
        self.Close()
            

class CriarConta (wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(300, 175))
        self.CreateStatusBar()
        panel=wx.Panel(self, -1)
        
        self.util=wx.TextCtrl(panel,-1,'',style=wx.TE_LEFT)
        self.pw=wx.TextCtrl(panel,-1,'',style=wx.TE_LEFT|wx.TE_PASSWORD)
        self.confirmar=wx.TextCtrl(panel,-1,'',style=wx.TE_LEFT|wx.TE_PASSWORD)
        gride= wx.GridBagSizer(2,4)
        gride.Add(wx.StaticText(panel,-1,u'Username: '),(1,0),(1,1),wx.ALIGN_LEFT)
        gride.Add(wx.StaticText(panel,-1,u'Password: '),(2,0),(1,1),wx.ALIGN_LEFT)
        gride.Add(self.util,(1,1),(1,1),wx.EXPAND)
        gride.Add(self.pw,(2,1),(1,1),wx.EXPAND)
        gride.Add(wx.StaticText(panel,20,u'Confirmar Password: '),(3,0),(1,1),wx.ALIGN_RIGHT)
        gride.Add(self.confirmar, (3,1), (1,1), wx.EXPAND)
        gride.Add(wx.Button(panel, 300, u'Criar'), (4,0),(1,1), wx.EXPAND)
        gride.Add(wx.Button(panel, 400, 'Apagar'), (4,1), (1,1), wx.EXPAND)
        gride.AddGrowableCol(1)
        panel.SetSizer(gride)
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        self.Bind(wx.EVT_BUTTON, self.Criar, id=300)
        self.Bind(wx.EVT_BUTTON, self.Apagar, id=400)
        self.Center()
    
    def Criar (self, event):
        if len(self.util.GetValue())!= 2 and len(self.pw.GetValue())!=2:
            if self.pw.GetValue() == self.confirmar.GetValue():
                DB = 'agenda'
                HOST = 'localhost'
                DB_USER = 'root'
                DB_PASSWORD = '3380'
                self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
                cursor = self.connect.cursor()
                sql = "CALL `agenda`.`inserir_utilizador`('"+self.util.GetValue()+"','"+self.pw.GetValue()+"',0);"
                cursor.execute(sql)
                lista_utilizadores=cursor.fetchall()
                cursor.close()
                self.connect.close()

                dlg=wx.MessageDialog(self,u'A sua conta foi criada \ncom sucesso!',u'Informação',wx.OK | wx.ICON_INFORMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.Close()

            else:
                dlg=wx.MessageDialog(self,u'Ao criar uma nova conta, surgiu um erro! \nTente de novo.',u'Informação',wx.OK | wx.ICON_INFORMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.Close()
                frame = CriarConta(None, -1, "Agenda:.. Criar Conta... ")
                frame.Show(True)
        else:
            print 'erro'
            
    def Apagar(self, evt):
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "select * from utilizador where del!=1;"
        cursor.execute(sql)
        resultado = cursor.fetchall()
        cursor.close()
        self.connect.close()
        
        utilizador=self.util.GetValue()
        lista=[]
        id=[]
        nsa=[]
        print resultado
        for i in resultado:
            if utilizador==i[1]:
                nsa=i[0]

        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "UPDATE utilizador SET  del=1 where id="+str(nsa)+";"
        cursor.execute(sql)
        self.connect.commit()
        cursor.close()
        self.connect.close()

class Principal(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(265, 115))
            
        self.CreateStatusBar()
        
        menu= wx.MenuBar()
        ficheiro= wx.Menu()
        ajuda= wx.Menu()
        tarefas= wx.MenuItem(ficheiro,100,u'&Tarefas',u'Visionar Terafas')
        ficheiro.AppendItem(tarefas)
        contactos= wx.MenuItem(ficheiro,200,u'&Contactos',u'Visiona Contactos')
        ficheiro.AppendItem(contactos)
        diversos=wx.MenuItem(ficheiro, 400, u'&Diversos')
        
        ficheiro.AppendItem(diversos)
        
        ficheiro.AppendSeparator()
        sair = wx.MenuItem(ficheiro, 300, u'&Sair\tCtrl+S', u'Sair da Aplicação')
        sair.SetBitmap(wx.Image('application-exit.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap())
        ficheiro.AppendItem(sair)
        menu.Append(ficheiro,u'&Ficheiro')
        menu.Append(ajuda, u'&Ajuda')
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        self.SetMenuBar(menu)
        
        vbox = wx.BoxSizer(wx.VERTICAL)

        calend = cal.CalendarCtrl(self, -1, wx.DateTime_Now(),
        style = cal.CAL_SHOW_HOLIDAYS|cal.CAL_SEQUENTIAL_MONTH_SELECTION)
        vbox.Add(calend, 0, wx.EXPAND | wx.ALL, 20)
        self.Bind(cal.EVT_CALENDAR, self.OnCalSelected, id=calend.GetId())

        vbox.Add((-1, 20))

        hbox = wx.BoxSizer(wx.HORIZONTAL)
        vbox.Add(hbox, 0,  wx.LEFT, 8)

        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        vbox.Add(hbox2, 0, wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, 20)

        self.Bind(wx.EVT_MENU, self.Tarefas, id=100)
        self.Bind(wx.EVT_MENU, self.Contactos, id=200)
        self.Bind(wx.EVT_MENU, self.Sair, id=300)
        self.Bind(wx.EVT_MENU, self.Diversos, id=400) 
        self.SetSizerAndFit(vbox)

        self.Show(True)
        self.Centre()


    def OnCalSelected(self, event):
        date = event.GetDate()
        dt = string.split(str(date), ' ')
        s = ' '.join([str(s) for s in dt])
        
    def Tarefas(self,event):
        frame = Tarefas(None, -1, "Agenda:..Tarefas...")
        frame.Show(True)
        
    def Contactos(self,event):
        frame = Contactos(None, -1, "Agenda:..Contactos...")
        frame.Show(True)
        
    def Diversos (self, event):
        frame = Diversos(None, -1, "Agenda:..Diversos...")
        frame.Show(True)
        
        
    def Sair(self,event):
        self.Close()

class Tarefas(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition)
        
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        sizer=wx.GridBagSizer(9,9)
        sizer.Add(wx.Button(self, 100, "Pendentes"), (1,0), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 200, "Feitos"), (1,4), (1,1), wx.EXPAND)
        
        self.lc2 = wx.ListCtrl(self, -1, style=wx.LC_REPORT,size=(1000,600))
        self.lc2.InsertColumn(0, 'Texto Livre')
        self.lc2.InsertColumn(1, 'Designacao')
        self.lc2.InsertColumn(2, 'Status')
        self.lc2.InsertColumn(3, 'Categoria')
        self.lc2.InsertColumn(4, 'Alarme')
        self.lc2.InsertColumn(5, 'Data Incio')
        self.lc2.InsertColumn(6, 'Data Fim')
        self.lc2.InsertColumn(7, 'Hora Inicio')
        self.lc2.InsertColumn(8, 'Hora Fim')
        self.lc2.SetColumnWidth(0, 140)
        self.lc2.SetColumnWidth(1, 150)
        self.lc2.SetColumnWidth(2, 160)
        self.lc2.SetColumnWidth(3, 170)
        self.lc2.SetColumnWidth(4, 170)
        self.lc2.SetColumnWidth(5, 170)
        self.lc2.SetColumnWidth(6, 170)
        self.lc2.SetColumnWidth(7, 170)
        self.lc2.SetColumnWidth(8, 170)
        
        lista_id, lista2 = self.listas() #lista2 lista dos pendentes, lista1 lista dos feitos

        for i in lista2:
            vg.lista2.append(i)
            num_items = self.lc2.GetItemCount()
            self.lc2.InsertStringItem(num_items, str(i[1]))
            self.lc2.SetStringItem(num_items,1, str(i[2]))
            self.lc2.SetStringItem(num_items,2, str(i[3]))
            self.lc2.SetStringItem(num_items,3, str(i[4]))
            self.lc2.SetStringItem(num_items,4, str(i[6])) #alarme
            self.lc2.SetStringItem(num_items,5, str(i[7]))
            self.lc2.SetStringItem(num_items,6, str(i[8]))
            self.lc2.SetStringItem(num_items,7, str(i[9]))
            self.lc2.SetStringItem(num_items,8, str(i[10]))

        sizer.Add(self.lc2, (1,2), (1,1), wx.EXPAND)
    
        sizer.Add(wx.Button(self, 300, "Nova Tarefa"), (2,0), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 500, "Editar"), (2,4), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 600, "Apagar"), (3,0), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 400, "Terminar"), (3,4), (1,1), wx.EXPAND)
        
        sizer.AddGrowableRow(6)
        sizer.AddGrowableCol(6)
        self.SetSizerAndFit(sizer)
        self.Bind(wx.EVT_BUTTON, self.Pendentes, id=100)
        self.Bind(wx.EVT_BUTTON, self.Feitos, id=200)
        self.Bind(wx.EVT_BUTTON, self.Terminar, id=400)
        self.Bind(wx.EVT_BUTTON, self.NovaTarefa, id=300)
        self.Bind(wx.EVT_BUTTON, self.Editar, id=500)
        self.Bind(wx.EVT_BUTTON, self.Apagar, id=600)
        self.Centre()
        
    def listas (self):
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "SELECT tarefas.id,tarefas.texto, tarefas.designacao, if(tarefas.status=0,'Tarefa por fazer', 'Tarefa feita') as status,categorias.categoria, tarefas.categoria, if(tarefas.alarme=0,'Sem alarme','Com alarme') as alarme, tarefas.data_inicio, tarefas.data_fim, tarefas.hora_inicio, tarefas.hora_fim, tarefas.hora_alarme, tarefas.del FROM tarefas inner join categorias on categorias.id = tarefas.categoria where del=0;"
        cursor.execute(sql)
        resultado = cursor.fetchall()
        cursor.close()
        self.connect.close()
        lista2=[]
        lista_id=[]
        for i in resultado:
            if i[3]=='Tarefa por fazer':
                lista_id.append(i[0])
                lista2.append(i) #lista2 e' a lista dos pendentes
        return lista_id, lista2 
        
    def Pendentes (self, evt):
        self.lc2.DeleteAllItems()
        lista_id, lista2 = self.listas()
        for i in lista2:
            num_items = self.lc2.GetItemCount()
            self.lc2.InsertStringItem(num_items, str(i[1]))
            self.lc2.SetStringItem(num_items,1, str(i[2]))
            self.lc2.SetStringItem(num_items,2, str(i[3]))
            self.lc2.SetStringItem(num_items,3, str(i[4]))
            self.lc2.SetStringItem(num_items,4, str(i[6]))
            self.lc2.SetStringItem(num_items,5, str(i[7]))
            self.lc2.SetStringItem(num_items,6, str(i[8]))
            self.lc2.SetStringItem(num_items,7, str(i[9]))
            self.lc2.SetStringItem(num_items,8, str(i[10]))
    def Feitos (self, evt):
        self.lc2.DeleteAllItems()
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "SELECT tarefas.id,tarefas.texto, tarefas.designacao, if(tarefas.status=0,'Tarefa por fazer', 'Tarefa feita') as status,categorias.categoria, tarefas.categoria, if(tarefas.alarme=0,'Sem alarme','Com alarme') as alarme, tarefas.data_inicio, tarefas.data_fim, tarefas.hora_inicio, tarefas.hora_fim, tarefas.hora_alarme, tarefas.del FROM tarefas inner join categorias on categorias.id = tarefas.categoria where del=0;"
        cursor.execute(sql)
        resultado = cursor.fetchall()
        cursor.close()
        self.connect.close()
        lista1=[]
        for i in resultado:
            if i[3]=='Tarefa feita':
                lista1.append(i) #lista2 e' a lista dos pendentes
                vg.lista1.append(i)
                vg.lista_id.append(i[0])
        for i in lista1:
            num_items = self.lc2.GetItemCount()
            self.lc2.InsertStringItem(num_items, str(i[1]))
            self.lc2.SetStringItem(num_items,1, str(i[2]))
            self.lc2.SetStringItem(num_items,2, str(i[3]))
            self.lc2.SetStringItem(num_items,3, str(i[4]))
            self.lc2.SetStringItem(num_items,4, str(i[6]))
            self.lc2.SetStringItem(num_items,5, str(i[7]))
            self.lc2.SetStringItem(num_items,6, str(i[8]))
            self.lc2.SetStringItem(num_items,7, str(i[9]))
            self.lc2.SetStringItem(num_items,8, str(i[10]))
        
    def Terminar (self, evt):
        self.Close()
    
    def Apagar (self, evt):
        apagar=self.lc2.GetFocusedItem()
        lista_id_pen, lista2= self.listas() #lista1=feitos, lista2=pendentes
        lista_id_fei=vg.lista_id
        lista1=vg.lista1
        for i in lista1:
            if i[3]=='Tarefa feita':
                id=lista_id_fei[apagar]
            else:
                for i in lista2:
                    if i[3]=='Tarefa por fazer':
                        id=lista_id_pen[apagar]
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "UPDATE tarefas SET  del=1 where id="+str(id)+";"
        cursor.execute(sql)
        self.connect.commit()
        cursor.close()
        self.connect.close()
        self.Pendentes(evt)
        
    def NovaTarefa(self, evt):
        frame = Nova(None, -1, u"Agenda:..Tarefa:..Nova Tarefa:..")
        frame.Show(True)
        
    def Editar(self, evt):
        vg.seleccao=self.lc2.GetFocusedItem()
        frame = Editar(None, -1, u"Agenda:..Tarefa:..Editar Tarefa:..")
        frame.Show(True)
        
class Editar(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition)
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "select * from categorias;"
        cursor.execute(sql)
        resultado = cursor.fetchall()
        cursor.close()
        self.connect.close()
        
        self.seleccao=vg.seleccao
        self.lista_tarefas=vg.lista2
        
        self.categorias=[]
        self.id_cat=[]
        for i in resultado:
            self.id_cat.append(i)
            self.categorias.append(i[1])
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        sizer=wx.GridBagSizer(13,9)
        sizer.Add(wx.StaticText(self,-1, "Texto"), (1,0), (1,1), wx.ALIGN_LEFT)
        self.texto=wx.TextCtrl(self,-1, "")
        sizer.Add(self.texto, (1,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self,-1, "Descricao"), (2,0), (1,1), wx.ALIGN_LEFT)
        self.descricao=wx.TextCtrl(self,-1, "")
        sizer.Add(self.descricao, (2,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Status"), (3,0), (1,1), wx.ALIGN_LEFT)
        self.status=wx.CheckBox(self, 1, 'Tarefa Feita')
        sizer.Add(self.status, (3,1), (1,1), wx.EXPAND)    
        sizer.Add(wx.StaticText(self, -1, "Categoria"), (4,0), (1,1), wx.ALIGN_LEFT)
        self.categoria=wx.ComboBox(self, -1, choices=self.categorias)
        sizer.Add(self.categoria, (4,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Data Inicio"), (5,0), (1,1), wx.ALIGN_LEFT)
        self.dt_inicio=wx.TextCtrl(self, -1, "")
        sizer.Add(self.dt_inicio, (5,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Data Fim"), (6,0), (1,1), wx.ALIGN_LEFT)
        self.dt_fim=wx.TextCtrl(self, -1, "")
        sizer.Add(self.dt_fim, (6,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Hora Inicio"), (7,0), (1,1), wx.ALIGN_LEFT)
        self.hr_inicio=wx.TextCtrl(self, -1, "")
        sizer.Add(self.hr_inicio, (7,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Hora Fim"), (8,0), (1,1), wx.ALIGN_LEFT)
        self.hr_fim=wx.TextCtrl(self, -1, "")
        sizer.Add(self.hr_fim, (8,1), (1,1), wx.EXPAND)
        
        self.texto.SetValue(self.lista_tarefas[self.seleccao][1])
        self.descricao.SetValue(self.lista_tarefas[self.seleccao][2])
        self.dt_inicio.SetValue(str(self.lista_tarefas[self.seleccao][7]))
        self.dt_fim.SetValue(str(self.lista_tarefas[self.seleccao][8]))
        self.hr_inicio.SetValue(str(self.lista_tarefas[self.seleccao][9]))
        self.hr_fim.SetValue(str(self.lista_tarefas[self.seleccao][10]))
        self.categoria.SetValue(str(self.lista_tarefas[self.seleccao][4]))
        self.status.SetValue(False)
        
        sizer.Add(wx.Button(self, 3000, "Guardar"), (9,0), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 2000, "Terminar"), (9,1), (1,1), wx.EXPAND)
        sizer.AddGrowableRow(6)
        sizer.AddGrowableCol(6)
        self.SetSizerAndFit(sizer)
        self.Centre()
        self.Bind(wx.EVT_BUTTON, self.Guardar, id=3000)
        self.Bind(wx.EVT_BUTTON, self.Terminar, id=2000)
    
    def Guardar (self, evt):
        escolha=self.status.GetValue()
        if escolha==True:
            status=1
        if escolha==False:
            status=0
        vg.status=status
        texto=self.texto.GetValue()
        designacao=self.descricao.GetValue()
        seleccao=self.categoria.GetValue()
        for i in self.id_cat:
            if seleccao==i[1]:
                categoria=i[0]
        dt_inicio=self.dt_inicio.GetValue()
        dt_fim=self.dt_fim.GetValue()
        hr_inicio=self.hr_inicio.GetValue()
        hr_fim=self.hr_inicio.GetValue()
        alarme=vg.alarme
        hora=vg.hora
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()                                                              #status
        sql = "update tarefas set texto='"+str(texto)+"', designacao='"+str(designacao)+"', status="+str(status)+", categoria="+str(categoria)+", alarme="+str(alarme)+", data_inicio='"+str(dt_inicio)+"', data_fim='"+str(dt_fim)+"', hora_inicio='"+str(hr_inicio)+"', hora_fim='"+str(hr_fim)+"', numero_contactos_nsa=0, hora_alarme='"+str(hora)+"', del=0 where id="+str(self.lista_tarefas[self.seleccao][0])+";"
        print sql
        cursor.execute(sql)
        resultado = cursor.fetchall()
        cursor.close()
        self.connect.close()
        lista1=[]
        for i in resultado:
            if i[3]==0:
                lista2.append(i)
                
    def Terminar (self, evt):
        self.Close()

class V ():
    def __init__(self):
        self.nome=''
        self.alarme=0
        self.hora=''
        self.status=0
        self.seleccao= int
        self.lista2=[] #lista das tarefas pendentes
        self.lista1=[]
        self.lista_id=[]
    def Primeiro(self):
        self.alarme=0
        self.hora=''
        
        
class Nova (wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(600, 600))
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "select * from categorias;"
        cursor.execute(sql)
        resultado = cursor.fetchall()
        cursor.close()
        self.connect.close()
        self.categorias=[]
        self.id_cat=[]
        for i in resultado:
            self.id_cat.append(i)
            self.categorias.append(i[1])
        
        
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        sizer=wx.GridBagSizer(13,9)
        sizer.Add(wx.StaticText(self,-1, "Texto"), (1,0), (1,1), wx.ALIGN_LEFT)
        self.texto=wx.TextCtrl(self,-1, "")
        sizer.Add(self.texto, (1,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self,-1, "Descricao"), (2,0), (1,1), wx.ALIGN_LEFT)
        self.descricao=wx.TextCtrl(self,-1, "")
        sizer.Add(self.descricao, (2,1), (1,1), wx.EXPAND)
        
               
        sizer.Add(wx.StaticText(self, -1, "Categoria"), (3,0), (1,1), wx.ALIGN_LEFT)
        self.categoria=wx.ComboBox(self, -1, choices=self.categorias)
        sizer.Add(self.categoria, (3,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Data Inicio"), (4,0), (1,1), wx.ALIGN_LEFT)
        self.dt_inicio=wx.TextCtrl(self, -1, "0000-00-00")
        sizer.Add(self.dt_inicio, (4,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Data Fim"), (5,0), (1,1), wx.ALIGN_LEFT)
        self.dt_fim=wx.TextCtrl(self, -1, "0000-00-00")
        sizer.Add(self.dt_fim, (5,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Hora Inicio"), (6,0), (1,1), wx.ALIGN_LEFT)
        self.hr_inicio=wx.TextCtrl(self, -1, "00:00:00")
        sizer.Add(self.hr_inicio, (6,1), (1,1), wx.EXPAND)
        sizer.Add(wx.StaticText(self, -1, "Hora Fim"), (7,0), (1,1), wx.ALIGN_LEFT)
        self.hr_fim=wx.TextCtrl(self, -1, "00:00:00")
        sizer.Add(self.hr_fim, (7,1), (1,1), wx.EXPAND)
     
        sizer.Add(wx.Button(self, 3000, "Inserir"), (9,0), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 2000, "Terminar"), (10,1), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 1000, "Alarme"), (9,1), (1,1), wx.EXPAND)
        sizer.AddGrowableRow(6)
        sizer.AddGrowableCol(6)
        self.SetSizerAndFit(sizer)
        self.Centre()
        self.Bind(wx.EVT_BUTTON, self.Inserir, id=3000)
        self.Bind(wx.EVT_BUTTON, self.Terminar, id=2000)
        self.Bind(wx.EVT_BUTTON, self.Alarme, id=1000)

    def buscar(self):
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.conn = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        
        texto=self.texto.GetValue()
        descricao=self.descricao.GetValue()
        seleccao=self.categoria.GetValue()
        for i in self.id_cat:
            if seleccao==i[1]:
                categoria=i[0]
        dt_inicio=self.dt_inicio.GetValue()
        dt_fim=self.dt_fim.GetValue()
        hr_inicio=self.hr_inicio.GetValue()
        hr_fim=self.hr_inicio.GetValue()
        alarme=vg.alarme
        horas=vg.hora
        if alarme==0:
            alarme=''
        return texto, descricao, categoria, alarme, dt_inicio, dt_fim, hr_inicio, hr_fim, horas
    
    def Inserir (self, evt):
        texto, descricao, categoria, alarme, dt_inicio, dt_fim, hr_inicio, hr_fim, horas = self.buscar()
        sql = "CALL `agenda`.`inserir_tarefas`('"+str(texto)+"','"+str(descricao)+"',0,"+str(categoria)+",'"+str(alarme)+"','"+str(dt_inicio)+"','"+str(dt_fim)+"','"+str(hr_inicio)+"','"+str(hr_fim)+"',0,'"+str(horas)+"',0);"
        cursor = self.conn.cursor()
        cursor.execute(sql)
        self.conn.commit()
        cursor.execute("select * from tarefas;")
        cursor.close()
        self.conn.close()
        self.Close()
    def Terminar (self, evt):
        self.Close()
        
    def Alarme (self, evt):
        frame = Alarme(None, -1, u"Agenda:..Tarefas:..Nova Tarefa:..Alarme:..")
        frame.Show(True)

class Alarme (wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, size=(450,450))
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        
        panel = wx.Panel(self, -1)
        self.rb1 = wx.RadioButton(panel, -1, 'Sem Alarme', (150, 30), style=wx.RB_GROUP)
        self.texto = wx.StaticText(panel, -1, 'Com Alarme: ', (150, 70))

        self.rb3 = wx.RadioButton(panel, -1, 'Diario', (200, 90))
        self.rb4 = wx.RadioButton(panel, -1, 'Semanal', (200, 110))
        self.rb5 = wx.RadioButton(panel, -1, 'Mensal', (200, 130))
        self.rb6 = wx.RadioButton(panel, -1, 'Anual', (200, 150))
        self.texto2 = wx.StaticText(panel, -1, 'A que horas: ', (200, 190))
        self.horas = wx.TextCtrl(panel, -1, '', (300, 190))
        self.botao = wx.Button(panel, 100, 'Aceitar Valores', (200, 310))
        self.Bind(wx.EVT_RADIOBUTTON, self.Aceitar, id=self.rb1.GetId())
        self.Bind(wx.EVT_RADIOBUTTON, self.Aceitar, id=self.rb3.GetId())
        self.Bind(wx.EVT_RADIOBUTTON, self.Aceitar, id=self.rb4.GetId())
        self.Bind(wx.EVT_RADIOBUTTON, self.Aceitar, id=self.rb5.GetId())
        self.Bind(wx.EVT_RADIOBUTTON, self.Aceitar, id=self.rb6.GetId())
        self.Bind(wx.EVT_BUTTON, self.Aceitar, id=100)
        self.Aceitar(False)
        self.Centre()
        
        #guardar dados numa lista pra depois ser returnada e depois juntar a resposta do alarme e devolver as tarefas...
            
    def Aceitar (self, evt):
        sem=self.rb1.GetValue()
        diario=self.rb3.GetValue()
        semanal=self.rb4.GetValue()
        mensal=self.rb5.GetValue()
        anual=self.rb6.GetValue()
        self.hora=self.horas.GetValue()
        if sem==True:
            vg.alarme=0
            vg.hora=''            
        if diario==True:
            vg.alarme=1
            vg.hora=self.hora
        if semanal==True:
            vg.alarme=2
            vg.hora=self.hora
        if mensal==True:
            vg.alarme=3
            vg.hora=self.hora
        if anual ==True:
            vg.alarme=4
            vg.hora=self.hora   


class Contactos(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, size=(600, 600))

        
        grid= wx.GridBagSizer(2,11)
        
        grid.Add(wx.StaticText(self,-1,'Nome'),(1,0),(1,1),wx.ALIGN_LEFT)
        self.nome= wx.TextCtrl(self,-1,'',style=wx.TE_LEFT)
        grid.Add(self.nome,(1,1),(1,1),wx.EXPAND)
        grid.Add(wx.StaticText(self,-1,'Morada'),(2,0),(1,1),wx.ALIGN_LEFT)
        self.morada= wx.TextCtrl(self,-1,'',style=wx.TE_LEFT)
        grid.Add(self.morada,(2,1),(1,1),wx.EXPAND)        
        grid.Add(wx.StaticText(self,-1,'Aniversario'),(3,0),(1,1),wx.ALIGN_LEFT)
        self.datas=UserControl_Data.ComboData_Obj(self, -1)
        grid.Add(self.datas, (3,1), (1,1), wx.ALIGN_LEFT)
        grid.Add(wx.StaticText(self,-1,'Telefone'),(4,0),(1,1),wx.ALIGN_LEFT)
        self.telefone=wx.TextCtrl(self, -1, '', style=wx.TE_LEFT)
        grid.Add(self.telefone, (4,1), (1,1), wx.EXPAND)
        grid.Add(wx.StaticText(self,-1,'Telemovel'),(5,0),(1,1),wx.ALIGN_LEFT)
        self.telemovel=wx.TextCtrl(self, -1, '', style=wx.TE_LEFT)
        grid.Add(self.telemovel, (5,1), (1,1), wx.EXPAND)
        grid.Add(wx.StaticText(self,-1,'Fax'),(6,0),(1,1),wx.ALIGN_LEFT)
        self.fax=wx.TextCtrl(self, -1, '', style=wx.TE_LEFT)
        grid.Add(self.fax, (6,1), (1,1), wx.EXPAND)
        grid.Add(wx.StaticText(self,-1,'E-mail'),(7,0),(1,1),wx.ALIGN_LEFT)
        self.mail=wx.TextCtrl(self, -1, '', style=wx.TE_LEFT)
        grid.Add(self.mail, (7,1), (1,1), wx.EXPAND)
        grid.Add(wx.StaticText(self,-1,'Nota'),(8,0),(1,1),wx.ALIGN_LEFT)
        self.nota=wx.TextCtrl(self, -1, '', style=wx.TE_LEFT | wx.TE_MULTILINE)
        grid.Add(self.nota, (8,1), (1,1), wx.EXPAND)
        
        grid.Add(wx.Button(self,10,'Anterior'),(10,0),(1,1), wx.ALIGN_CENTER)
        grid.Add(wx.Button(self,11,'Seguinte'),(10,1),(1,1),wx.ALIGN_RIGHT)
        grid.Add(wx.Button(self,12,'Eliminar'),(11,0),(1,1),wx.ALIGN_CENTER)
        grid.Add(wx.Button(self,13,'Novo'),(11,1),(1,1),wx.ALIGN_RIGHT)
        grid.AddGrowableCol(1)
        self.SetSizerAndFit(grid)
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        
        self.Bind(wx.EVT_BUTTON, self.Anterior, id=10)
        self.Bind(wx.EVT_BUTTON, self.Seguinte, id=11)
        self.Bind(wx.EVT_BUTTON, self.Apagar, id=12)
        self.Bind(wx.EVT_BUTTON,self.Novo,id=13)
        contactos=self.ligar()
        self.lista_contactos=self.ligar()
        n_contact=len(contactos)
        if n_contact>0:
            contacto=contactos[0]
            datas=str(contacto[7])
            self.posicao=0
            self.nome.SetValue(contacto[1])
            self.morada.SetValue(contacto[2])
            self.datas.PorData(str(datas))
            self.telefone.SetValue(str(contacto[3]))
            self.telemovel.SetValue(str(contacto[4]))
            self.fax.SetValue(str(contacto[5]))
            self.mail.SetValue(contacto[6])
            self.nota.SetValue(contacto[8])
                
        self.Center()
    
    def Novo(self,event):
        frame = Novo(None, -1, "Agenda:..Contactos...")
        frame.Show(True)

    def ligar (self):
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "select * from contactos where del =0; "
        cursor.execute(sql)
        resultado = cursor.fetchall()
        cursor.close()
        self.connect.close()
        contactos=[]
        for i in resultado:
            contactos.append(i)
        return contactos
            
    def Anterior(self,event):
        contactos=self.ligar()
        print contactos
        if self.posicao==0:
            wx.Bell()
        else:
            self.posicao-=1
            datas=str(contactos[self.posicao][7])
            self.nome.SetValue(contactos[self.posicao][1])
            self.morada.SetValue(contactos[self.posicao][2])
            self.datas.PorData(datas)
            self.telefone.SetValue(str(contactos[self.posicao][3]))
            self.telemovel.SetValue(str(contactos[self.posicao][4]))
            self.fax.SetValue(str(contactos[self.posicao][5]))
            self.mail.SetValue(contactos[self.posicao][6])
            self.nota.SetValue(contactos[self.posicao][8])

    def Seguinte(self,event):
        contactos=self.ligar()
        if self.posicao<len(contactos)-1:
            if self.posicao == len(contactos)-1:
                wx.Bell()
            else:
                self.posicao+=1
                datas=str(contactos[self.posicao][7])
                self.nome.SetValue(contactos[self.posicao][1])
                self.morada.SetValue(contactos[self.posicao][2])
                self.datas.PorData(datas)
                self.telefone.SetValue(str(contactos[self.posicao][3]))
                self.telemovel.SetValue(str(contactos[self.posicao][4]))
                self.fax.SetValue(str(contactos[self.posicao][5]))
                self.mail.SetValue(contactos[self.posicao][6])
                self.nota.SetValue(contactos[self.posicao][8])

    
    
    def Apagar(self,event):
        id=self.lista_contactos[self.posicao][0]
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "UPDATE contactos SET  del=1 where id="+str(id)+";"
        cursor.execute(sql)
        self.connect.commit()
        cursor.close()
        self.connect.close()
            
class Novo(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, size=(600, 600))
        grid= wx.GridBagSizer(2,11)
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        grid.Add(wx.StaticText(self,-1,'Nome'),(1,0),(1,1),wx.ALIGN_LEFT)
        self.nome= wx.TextCtrl(self,-1,'',style=wx.TE_LEFT)
        grid.Add(self.nome,(1,1),(1,1),wx.EXPAND)
        grid.Add(wx.StaticText(self,-1,'Morada'),(2,0),(1,1),wx.ALIGN_LEFT)
        self.morada= wx.TextCtrl(self,-1,'',style=wx.TE_LEFT)
        grid.Add(self.morada,(2,1),(1,1),wx.EXPAND)        
        grid.Add(wx.StaticText(self,-1,'Aniversario'),(3,0),(1,1),wx.ALIGN_LEFT)
        self.data=UserControl_Data.ComboData_Obj(self, -1)
        grid.Add(self.data, (3,1), (1,1), wx.ALIGN_LEFT)
        grid.Add(wx.StaticText(self,-1,'Telefone'),(4,0),(1,1),wx.ALIGN_LEFT)
        self.telefone=wx.TextCtrl(self, -1, '', style=wx.TE_LEFT)
        grid.Add(self.telefone, (4,1), (1,1), wx.EXPAND)
        grid.Add(wx.StaticText(self,-1,'Telemovel'),(5,0),(1,1),wx.ALIGN_LEFT)
        self.telemovel=wx.TextCtrl(self, -1, '', style=wx.TE_LEFT)
        grid.Add(self.telemovel, (5,1), (1,1), wx.EXPAND)
        grid.Add(wx.StaticText(self,-1,'Fax'),(6,0),(1,1),wx.ALIGN_LEFT)
        self.fax=wx.TextCtrl(self, -1, '', style=wx.TE_LEFT)
        grid.Add(self.fax, (6,1), (1,1), wx.EXPAND)
        grid.Add(wx.StaticText(self,-1,'E-mail'),(7,0),(1,1),wx.ALIGN_LEFT)
        self.mail=wx.TextCtrl(self, -1, '', style=wx.TE_LEFT)
        grid.Add(self.mail, (7,1), (1,1), wx.EXPAND)
        grid.Add(wx.StaticText(self,-1,'Nota'),(8,0),(1,1),wx.ALIGN_LEFT)
        self.nota=wx.TextCtrl(self, -1, '', style=wx.TE_LEFT | wx.TE_MULTILINE)
        grid.Add(self.nota, (8,1), (1,1), wx.EXPAND)
        grid.Add(wx.Button(self,100,'Guardar'),(10,0),(1,1), wx.ALIGN_CENTER)
        grid.Add(wx.Button(self,200,'Terminar'),(10,2),(1,1), wx.EXPAND)
        grid.AddGrowableCol(1)
        self.SetSizerAndFit(grid)
        self.Centre()
        
        self.Bind(wx.EVT_BUTTON, self.Guardar, id=100)
        self.Bind(wx.EVT_BUTTON, self.Sair, id=200)
        
    def Guardar(self, evt):
        nome=self.nome.GetValue()
        morada=self.morada.GetValue()
        data=self.data.DevolverDataSeleccionada()
        telefone=self.telefone.GetValue()
        movel=self.telemovel.GetValue()
        fax=self.fax.GetValue()
        mail=self.mail.GetValue()
        nota=self.nota.GetValue()
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "CALL `agenda`.`inserir_contactos`('"+nome+"','"+morada+"',"+str(telefone)+","+str(movel)+","+str(fax)+",'"+mail+"','"+data+"','"+nota+"',0);"
        cursor.execute(sql)
        self.connect.commit()
        cursor.close()
        self.connect.close()
    
    def Sair(self, evt):
        self.Close()
        
class Diversos(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition)
        self.SetIcon(wx.Icon(u'address-book-new.png', wx.BITMAP_TYPE_ANY))
        sizer=wx.GridBagSizer(9,9)
        sizer.Add(wx.StaticText(self, -1, 'Sites'), (0,2), (1,1), wx.ALIGN_CENTRE)
        self.lc = wx.ListCtrl(self, -1, style=wx.LC_LIST,size=(900,250))
        self.lc.InsertColumn(0, '')
        self.lc.SetColumnWidth(0, 140)
    
        sites=self.sites()
        
        for i in sites:
            if i[2]==0:
                num_items = self.lc.GetItemCount()
                self.lc.InsertStringItem(num_items, str(i[1]))
        
        self.inserir=wx.TextCtrl(self,-1,'',style= wx.TE_LEFT)
        sizer.Add(self.inserir, (2,2), (1,1), wx.EXPAND)
        
        sizer.Add(self.lc, (1,2), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 3000, "Guardar"), (2,0), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 5000, "Apagar"), (2,4), (1,1), wx.EXPAND)
        sizer.Add(wx.Button(self, 400, "Terminar"), (4,4), (1,1), wx.EXPAND)
        
        
        sizer.AddGrowableRow(6)
        sizer.AddGrowableCol(6)
        self.SetSizerAndFit(sizer)
        self.Bind(wx.EVT_BUTTON, self.Terminar, id=400)
        self.Bind(wx.EVT_BUTTON, self.GuardarSite, id=3000)
        self.Bind(wx.EVT_BUTTON, self.ApagarSite, id=5000)
        self.Centre()
    
    def sites (self):
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = """select * from diversos_site where del=0;"""
        cursor.execute(sql)
        resultado = cursor.fetchall()
        cursor.close()
        self.connect.close()
        sites=[]
        for i in resultado:
            sites.append(i)
        return sites

    def Procurar (self, evt):
        dlg = wx.FileDialog(self, "Escolha o ficheiro", os.getcwd(), "ola", "*.*", wx.OPEN)
        if dlg.ShowModal() == wx.ID_OK:
                self.ficheiro = dlg.GetPath()
                self.procurar.SetValue(self.ficheiro)
                
        dlg.Destroy()
    
    def Terminar (self, evt):
        self.Close()
        
    def GuardarSite (self, evt):
        site=self.inserir.GetValue()
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = 'CALL `agenda`.`inserir_diversos_site`("'+site+'",0);'
        cursor.execute(sql)
        self.connect.commit()
        cursor.close()
        self.connect.close()
        self.lc.DeleteAllItems()
        sites=self.sites()
        for i in sites:
            if i[2]==0:
                num_items = self.lc.GetItemCount()
                self.lc.InsertStringItem(num_items, str(i[1]))
    
    def ApagarSite(self, evt):
        sites=self.sites()
        lista=[]
        for i in sites:
            if i[2]==0:
                lista.append(i)
        apagar=self.lc.GetFocusedItem()
        id=lista[apagar][0]
        print id
        DB = 'agenda'
        HOST = 'localhost'
        DB_USER = 'root'
        DB_PASSWORD = '3380'
        self.connect = MySQLdb.Connection(db=DB, host=HOST, user=DB_USER, passwd=DB_PASSWORD)
        cursor = self.connect.cursor()
        sql = "UPDATE diversos_site SET  del=1 where id="+str(id)+";"
        cursor.execute(sql)
        self.connect.commit()
        cursor.close()
        self.connect.close()
        self.lc.DeleteAllItems()
        for i in lista:
                num_items = self.lc.GetItemCount()
                self.lc.InsertStringItem(num_items, str(i[1]))
    
class MyApp(wx.App):
    def OnInit(self):
        frame = Acesso(None, -1, 'Agenda:..')
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app = MyApp(0)
vg=V()
app.MainLoop()

fnds|Usa as tags CODE!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

então já ninguém dá-me uma mãozinha???

vá lá...

isto está difícil

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pessoal, acabei por descobrir uma coisa muita importante.

Para eu criar a função alarme, tenho que encontrar um método de colocar um procedimento a trabalhar em modo offline, ou seja o programa mesmo fechado ou o pc desligado ele terá sempre que contar os segundos que faltam para ele realizar algo... sabem alguma coisa disto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cada vez que o programa abre verificas as horas do sistema e comparas com a hora em que o alarme devia de tocar.

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