Temporizador

Josu Rodriguez Vilda jrvilda en gmail.com
Lun Sep 11 23:31:46 CEST 2006


Arnau Sanchez wrote:
>
> Josu Rodriguez Vilda escribió:
>
>> Hola amigos,
>>
>> Tengo echa una aplicación que cada vez que se pulsa un botón revisa 
>> si existe ciertos ficheros, servicios y claves de registros dados.
>> Ahora lo que me gustarla que esa revisión fuese automática cada 3 o 5 
>> segundos.
>> Osea que si el botón esta pinchado, pues cada 3 segundos lance la 
>> función.
>> Sabéis como podría hacerlo?
>>
>
> ¿Puedes ampliar un poco la información? Por ejemplo, ¿con qué GUI lo 
> estás haciendo?
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
Estoy empezando con esto de python , por lo que el codigo no creo que 
este ni muy depurado ni siquiera organizado, pero si puede ayudar a 
alguien pues hay va.
Lo que hace el programita es leer un fichero ini, y carga las diferentes 
secciones del fichero para comprobar si existen los ficheros o carpetas, 
los servicios. o las claves de registro .
-------------------------------------------Frame1.py
#Boa:Frame:Frame1

import wx,ConfigParser,os,wx.lib.buttons,win32api,win32con,win32service,time
import wx.lib.foldpanelbar as fpb

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1ABRIR, wxID_FRAME1CARGAR, wxID_FRAME1GENBUTTON1,
 wxID_FRAME1PANEL1, wxID_FRAME1STATICTEXT1, wxID_FRAME1TEXTCTRL1,
 wxID_FRAME1WINDOW1,
] = [wx.NewId() for _init_ctrls in range(8)]

[wxID_FRAME1TOOLBAR1TOOLS0, wxID_FRAME1TOOLBAR1TOOLS1,
] = [wx.NewId() for _init_coll_toolBar1_Tools in range(2)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(491, 139), size=wx.Size(385, 134),
              style=wx.TAB_TRAVERSAL | wx.WANTS_CHARS | wx.CAPTION | 
wx.CLOSE_BOX | wx.SYSTEM_MENU | wx.STATIC_BORDER | wx.MINIMIZE_BOX,
              title='Berki-rev')
        self.SetClientSize(wx.Size(377, 107))
        self.SetMaxSize(wx.Size(385, 750))
        self.SetForegroundColour(wx.Colour(100, 221, 131))
        self.SetIcon(wx.Icon('cberki.ico',wx.BITMAP_TYPE_ICO))

        self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', 
parent=self,
              pos=wx.Point(0, 0), size=wx.Size(377, 107),
              style=wx.TAB_TRAVERSAL)

        self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
              label='Archivo de configuracion :', name='staticText1',
              parent=self.panel1, pos=wx.Point(24, 48), 
size=wx.Size(145, 13),
              style=0)
        self.staticText1.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, 
wx.BOLD, False,
              'Tahoma'))
        self.staticText1.SetForegroundColour(wx.Colour(0, 0, 0))

        self.textCtrl1 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL1, 
name='textCtrl1',
              parent=self.panel1, pos=wx.Point(24, 64), 
size=wx.Size(264, 20),
              style=0, value='')

        self.Abrir = wx.lib.buttons.GenButton(ID=wxID_FRAME1ABRIR, 
label='..',
              name='Abrir', parent=self.panel1, pos=wx.Point(300, 72),
              size=wx.Size(25, 20), style=0)
        self.Abrir.Bind(wx.EVT_BUTTON, self.OnAbrirButton, 
id=wxID_FRAME1ABRIR)

        self.Cargar = wx.lib.buttons.GenButton(ID=wxID_FRAME1CARGAR, 
label='{}',
              name='Cargar', parent=self.panel1, pos=wx.Point(335, 72),
              size=wx.Size(25, 20), style=0)
        self.Cargar.Enable(False)
        self.Cargar.Bind(wx.EVT_BUTTON, self.OnCargarButton,
              id=wxID_FRAME1CARGAR)

        self.window1 = wx.Window(id=wxID_FRAME1WINDOW1, name='window1',
              parent=self.panel1, pos=wx.Point(16, 112), 
size=wx.Size(344, 500),
              style=0)

        self.genButton1 = wx.lib.buttons.GenButton(ID=wxID_FRAME1GENBUTTON1,
              label='?', name='genButton1', parent=self.panel1,
              pos=wx.Point(300, 40), size=wx.Size(59, 25), style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)


    def OnAbrirButton(self, event):
        dlg = wx.FileDialog(self, "Selecciona el ejecutable", ".", "", 
"Configuracion (*.ini)|*.ini|Todos (*.*)|*.*", wx.OPEN)
        try:
            if dlg.ShowModal() == wx.ID_OK:
               
                filename = dlg.GetPath()
                # Your code
                self.textCtrl1.SetValue(filename)
        finally:
            dlg.Destroy()
        self.Cargar.Enable(True)   
        event.Skip()

    def OnCargarButton(self, event):
               
        cp = ConfigParser.ConfigParser()
        cp.read(self.textCtrl1.GetValue())
       
        lista=cp.sections()
        self.SetClientSize(wx.Size(385, 750))
        self.window1.DestroyChildren()
                 
                 
        pnl = fpb.FoldPanelBar(self.window1, wx.ID_ANY, 
wx.DefaultPosition, wx.Size(350, 1000),
                       fpb.FPB_DEFAULT_STYLE | fpb.FPB_VERTICAL)
       
        item = pnl.AddFoldPanel("Archivos & Carpetas", collapsed=False)
        for opt,value in cp.items("archivos&carpetas"):
           
            if (os.access(value,os.F_OK)) == True:
                resultado = " existe"
                prueba1=wx.StaticText(item, wx.ID_ANY, 
"..."+value[-45:]+" "+resultado)
                prueba1.SetForegroundColour(wx.Colour(0, 128, 64))
                pnl.AddFoldPanelWindow(item, prueba1)
               
               
            else:
                resultado = " No existe"
                prueba1=wx.StaticText(item, wx.ID_ANY, 
"..."+value[-45:]+" "+resultado)
                prueba1.SetForegroundColour(wx.Colour(255, 0, 0))
                pnl.AddFoldPanelWindow(item, prueba1)
           
        pnl.AddFoldPanelSeparator(item)
       
##        item = pnl.AddFoldPanel("Ficheros", collapsed=False)
##        for opt,value in cp.items("Ficheros"):
##            try:
##                print value
##                f = open(value,"r")
##                resultado = " existe"      
##            except IOError:                    
##                resultado = " no existe"
##            
##            pnl.AddFoldPanelWindow(item, wx.StaticText(item, 
wx.ID_ANY, "..."+value[-45:]+" "+resultado))
##        pnl.AddFoldPanelSeparator(item)

        item = pnl.AddFoldPanel("Registro de Windows", collapsed=False)
        for opt,value in cp.items("Registro"):
            try:
                aReg = win32api.RegConnectRegistry(None, 
win32con.HKEY_CURRENT_USER)
                aKey = win32api.RegOpenKeyEx(aReg, value) 
                win32api.RegCloseKey(aKey)
                resultado = " existe"
                prueba1=wx.StaticText(item, wx.ID_ANY, 
"..."+value[-45:]+" "+resultado)
                prueba1.SetForegroundColour(wx.Colour(0, 128, 64))
                pnl.AddFoldPanelWindow(item, prueba1)
                
            except:
                resultado = " No existe"
                prueba1=wx.StaticText(item, wx.ID_ANY, 
"..."+value[-45:]+" "+resultado)
                prueba1.SetForegroundColour(wx.Colour(255, 0, 0))
                pnl.AddFoldPanelWindow(item, prueba1)
           
        pnl.AddFoldPanelSeparator(item)
       
        item = pnl.AddFoldPanel("Servicios", collapsed=False)
       
        for opt,value in cp.items("Servicios"):
            try:
                scmhandle = win32service.OpenSCManager(None, None, 
win32service.SC_MANAGER_ALL_ACCESS)
                handle= win32service.OpenService(scmhandle, value, 
win32service.SERVICE_ALL_ACCESS)
                prn= win32service.QueryServiceStatus(handle)
                       
                if prn[1] == win32service.SERVICE_STOPPED:
                    resultado = " Esta parado"
                    prueba1=wx.StaticText(item, wx.ID_ANY, 
"..."+value[-45:]+" "+resultado)
                    prueba1.SetForegroundColour(wx.Colour(255, 0, 0))
                    pnl.AddFoldPanelWindow(item, prueba1)
                elif prn[1] == win32service.SERVICE_RUNNING:
                    resultado = " Esta Iniciado"
                    prueba1=wx.StaticText(item, wx.ID_ANY, 
"..."+value[-45:]+" "+resultado)
                    prueba1.SetForegroundColour(wx.Colour(0, 128, 64))
                    pnl.AddFoldPanelWindow(item, prueba1)
                else :
                    resultado = " estado desconocido"
                    prueba1=wx.StaticText(item, wx.ID_ANY, 
"..."+value[-45:]+" "+resultado)
                    prueba1.SetForegroundColour(wx.Colour(255, 255, 128))
                    pnl.AddFoldPanelWindow(item, prueba1)
            except:
                resultado = " no existe"
                prueba1=wx.StaticText(item, wx.ID_ANY, 
"..."+value[-45:]+" "+resultado)
                prueba1.SetForegroundColour(wx.Colour(255, 255, 128))
                pnl.AddFoldPanelWindow(item, prueba1)
        pnl.AddFoldPanelSeparator(item)

        self.pnl = pnl
       
       
        event.Skip()

    def OnToolBar1Tools0Tool(self, event):
        event.Skip()
---------------------------------
----------------------------------App1.py
#!/usr/bin/env python
#Boa:App:BoaApp

import wx

import Frame1

modules ={'Frame1': [1, 'Main frame of Application', 'Frame1.py']}

class BoaApp(wx.App):
    def OnInit(self):
       
        wx.InitAllImageHandlers()
        self.main = Frame1.create(None)
        self.main.Show()
        self.SetTopWindow(self.main)
        return True

def main():
    application = BoaApp(0)
    application.MainLoop()

if __name__ == '__main__':
    main()
------------------------------------
-------------------------------Ejemplo.ini
[archivos&carpetas]

a= c:\\Documents and 
Settings\\Administrador\\Escritorio\\berki-pandarev\\boot.ini
b= c:\\boot.ini
c= c:\\boot.ini
d= c:\\casa.ini
e= %programfiles%

g= C:\Documents and Settings\Administrador

[Servicios]


c= Faxs
d= Faxs
e= Faxs

[Registro]

a=Software\Microsoft\Internet Explorer\TypedURLs
------------------------------------




Más información sobre la lista de distribución Python-es