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

Sign in to follow this  
mariogouveia1

Problema!!!

Recommended Posts

mariogouveia1

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?

Share this post


Link to post
Share on other sites
Tharis

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ã.

Share this post


Link to post
Share on other sites
mariogouveia1

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!

Share this post


Link to post
Share on other sites
mariogouveia1

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...

Share this post


Link to post
Share on other sites
Tharis

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,())

Share this post


Link to post
Share on other sites
mariogouveia1

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!

Share this post


Link to post
Share on other sites
mariogouveia1

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?

Share this post


Link to post
Share on other sites
fnds

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.