wxmenu => Linux si, Windows no...

Ariel Nardelli pan_python en yahoo.com.ar
Lun Oct 9 07:18:21 CEST 2006


Puff...
Hay algo que me viene teniendo loco en estos dias y es que no logro que 
en windows me funcione el wxmenu, es muy probable que me este olvidando 
de algo pero no se que es...
En linux las opciones del los menues se desplegan bien sin probelma y 
cuando uno le hace click en cada opcion esta llama a al programa sin 
problemas.. PERO... en windows no pasa eso, en win se presentan las 
opciones como siempre pero al hacer click sobre cada opcion directamente 
no pasa nada, si nada de nada :) directamente no llama a la funcion ni 
sale mensaje de error, nada de nada de nada...
A alguien le paso lo mismo?

Aca les dejo el programa tal cual esta funcionando para que lo miren a 
ver si alguien encuentra algun error.., yo ya lo mire por todos nados y 
no encuentro el porque en linux las opciones andan y en windows no...

#!/usr/bin/env python
# -*- coding: iso8859-1 -*-

# Maestro de la aplicacion de FacNar
import wxversion
wxversion.select("2.6")
import wx
# Saco la version que uso..
import locale
if wx.PlatformInfo[1] == "wxGTK": # Es linux...
    locale.setlocale(locale.LC_ALL,"es_AR")
if wx.PlatformInfo[1] == "wxMSW": # Es Wincaca...
    locale.setlocale(locale.LC_ALL,"SP")

import sys
sys.path.append('modulos/')  # Modulos del Sistema
sys.path.append('general/')  # General.
sys.path.append('general/localidades')  # General - Localidades.
sys.path.append('comprobantes/')  # Comprobantes.
sys.path.append('comprobantes/facturas')  # Comprobantes - Facturas.
sys.path.append('comprobantes/recibos')  # Comprobantes - Recibos.
sys.path.append('comprobantes/ndeb')  # Comprobantes - Notas de Debitos.
sys.path.append('comprobantes/ncred')  # Comprobantes - Notas de Creditos.
sys.path.append('comprobantes/resum')  # Comprobantes - Resumenes
sys.path.append('clientes/')  # Clientes.
sys.path.append('clientes/ctasctes')  # Clientes - Cuentas Corrientes.

from fechas import *
from sql import *

# Defino variables Globales.
mios_cuser = 0
mios_version = 0.70 # 02/09/06
mios_usql = 'nar'
mios_psql = 'datos'

# sistema en general.
class facnar(wx.MDIParentFrame):
    def __init__(self):
        wx.MDIParentFrame.__init__(self, None, -1, "", 
pos=(0,0),size=(1016,693), style = wx.DEFAULT_FRAME_STYLE| 
wx.VSCROLL)       
       
        # self.panel_1 = wx.Panel(self, -1)
        self.facnar_menubar = wx.MenuBar()
        self.SetMenuBar(self.facnar_menubar)
        # Estructura de Menues...
        # 00 Menu Principal.
        # 00 1ra linea de menus.
        # 00 2da Linea de Menus.
        # 00 3ra  Linea de Menus.
       
        # -10- Menu General (Las opciones generales)
        self.gral = wx.Menu()

        self.s10ven = wx.Menu()
        self.s10ven.Append(10101000, "Abm", "Altas, Bajas y modificaciones")
        self.s10ven.Append(10101500, "Listado", "Listado")
        self.gral.AppendMenu(10100000, "Vendedores", self.s10ven,"Los 
Vendedores")
        self.gral.Enable(10100000, False)

        self.s15iva = wx.Menu()
        self.s15iva.Append(10151000, "Abm", "Altas, Bajas y modificaciones")
        self.s15iva.Append(10151500, "Listado", "Listado")
        self.gral.AppendMenu(10150000, "Iva", self.s15iva,"Manejo de Iva")
        self.gral.Enable(10150000, False)

        self.s18loc = wx.Menu()
        self.s18loc.Append(10181000, "Abm", "Altas, Bajas y 
modificaciones de Localidades.")
        self.s18loc.Append(10181500, "Listado", "Listado de localidades")
        self.s18loc.Enable(10181500, False)
        self.gral.AppendMenu(10180000, "Localidades", 
self.s18loc,"Manejo de Localidades (Abm y listado)")

        self.gral.AppendSeparator()
       
        self.s20conf = wx.Menu()
       
        self.c10emp = wx.Menu()
        self.c10emp.Append(10201010, "Abm", "Altas, Bajas y modificaciones")
        self.c10emp.Append(10201015, "Listado", "Listado")
        self.s20conf.AppendMenu(10201000, "Empresas", 
self.c10emp,"Mantenimiento de Empresas")

        self.c15pve = wx.Menu()
        self.c15pve.Append(10201510, "Abm", "Altas, Bajas y modificaciones")
        self.c15pve.Append(10201515, "Listado", "Listado")
        self.s20conf.AppendMenu(10201500, "Puntos de Venta", 
self.c15pve,"Los Puntos de Venta")

        self.c20com = wx.Menu()
        self.c20com.Append(10202010, "Abm", "Altas, Bajas y modificaciones")
        self.c20com.Append(10202015, "Listado", "Listado")
        self.s20conf.AppendMenu(10202000, "Comprobantes", 
self.c20com,"Los Comprobantes")

        self.c30lot = wx.Menu()
        self.c30lot.Append(10202000, "Abm", "Altas, Bajas y modificaciones")
        self.c30lot.Append(10202500, "Listado", "Listado")
        self.s20conf.AppendMenu(10202500, "Lotes", self.c30lot,"Lotes de 
Facturacion")

        self.gral.AppendMenu(10200000, "Configuraciones", 
self.s20conf,"Configuraciones")
        self.gral.Enable(10200000, False)
        self.facnar_menubar.Append(self.gral, "General")

        # -20- Comprobantes
        self.comp = wx.Menu()
       
        self.compfac = wx.Menu() # Facturas.
        self.compfac.Append(20101000, "Emision", "Emite Nuevas Facturas")
        self.compfac.Enable(20101000, False)
        self.compfac.Append(20102000, "Consulta", "Visualiza Facturas ya 
emitidos")
        self.compfac.Append(20102500, "Resumen", "Resumen de Facturas 
por fechas")
        self.comp.AppendMenu(20100000, "Facturas", self.compfac,"Emision 
y Consulta de Facturas")

        self.comrec = wx.Menu() # Recibos...
        self.comrec.Append(20151000, "Emision", "Emite Nuevos Recibos")
        self.comrec.Append(20152000, "Consulta", "Visualiza Recibos ya 
emitidos")
        self.comrec.Append(20152500, "Resumen", "Resumen de Recibos por 
fechas")
        self.comp.AppendMenu(20150000, "Recibos", self.comrec,"Emision y 
Consulta de Recibos")

        self.comnde = wx.Menu() # Notas de Debito
        self.comnde.Append(20201000, "Emision", "Emite Nuevas Notas de 
debito")
        self.comnde.Enable(20201000, False)
        self.comnde.Append(20202000, "Consulta", "Visualiza las notas de 
debito ya emitidas")
        self.comnde.Append(20202500, "Resumen", "Resumen de notas de 
debito por fechas")
        self.comp.AppendMenu(20200000, "Notas de Debito", 
self.comnde,"Emision y Consulta de Notas de Debito")

        self.comncr = wx.Menu() # Notas de Credito.
        self.comncr.Append(20251000, "Emision", "Emite Nuevas Notas de 
Credito")
        self.comncr.Enable(20251000, False)
        self.comncr.Append(20252000, "Consulta", "Visualiza las notas de 
Credito ya emitidas")
        self.comncr.Append(20252500, "Resumen", "Resumen de notas de 
Credito por fechas")
        self.comp.AppendMenu(20250000, "Notas de Credito", 
self.comncr,"Emision y Consulta de Notas de Credito")

        self.comp.AppendSeparator()
       
        self.comre1 = wx.Menu() # Resumen de movimientos x fecha
        self.comre1.Append(20501000, "Resumen x Fecha", "Resumen de 
movimientos por fecha.")
        self.comp.AppendMenu(20500000, "Resumenes", self.comre1,"Resumen 
de Comprobantes x Fecha")

        self.facnar_menubar.Append(self.comp, "Comprobantes")

        # -30- Contado
        self.cont = wx.Menu()
        self.cont.Append(30100000, "Anula Factura","Anula Factura del 
mes en curso")
        self.cont.Enable(30100000, False)
        self.cont.Append(30150000, "Pagos Factura Contado","Carga los 
pagos de las facturas de contado.")
        self.cont.Enable(30150000, False)
        self.cont.Append(30200000, "Facturas Impagas Cont.","Listado de 
Facturas de Contado Impagas")
        self.cont.Enable(30200000, False)
        self.facnar_menubar.Append(self.cont, "Contado")

        # -40- Clientes
        self.cli = wx.Menu()
        self.cli.Append(40100000, "Abm","Altas, Bajas y Modificaciones 
de Clientes.")
        self.cli.Append(40150000, "Listado","Listado de Clientes.")
        self.cli.Enable(40150000, False)
       
        self.s20ccc = wx.Menu()
        self.s20ccc.Append(40201000, "Abm Movimientos", "Altas, Bajas y 
modificaciones manuales de Movimientos.")
        self.s20ccc.Enable(40201000, False)
        self.s20ccc.Append(40201500, "Resumen p/Cliente", "Resumen por 
cliente")
        self.s20ccc.Append(40202000, "Resumen General", "Muestra saldos 
cliente x cliente")
        self.s20ccc.Append(40203000, "Cierre de mes", "Hace el cierre de 
todo el mes")
        self.cli.AppendMenu(40200000, "Cuentas Corrientes", 
self.s20ccc,"Cuentas Corrientes de Clientes")
        self.facnar_menubar.Append(self.cli, "Clientes")

        # -50- Cobradores
        self.cob = wx.Menu()
        self.cob.Append(50100000, "Abm","Altas, Bajas y Modificaciones 
de Cobradores.")
        self.cob.Enable(50100000, False)
        self.cob.Append(50150000, "Listado","Listado de Cobradores.")
        self.cob.Enable(50150000, False)
       
        self.s20cco = wx.Menu()
        self.s20cco.Append(50201000, "Abm Movimientos", "Altas, Bajas y 
modificaciones manuales de Movimientos.")
        self.s20cco.Append(50201000, "Informe Pagos", "Informa los pagos 
de las facturas.")
        self.s20cco.Append(50201500, "Resumen p/Cliente", "Resumen por 
cobrador")
        self.s20cco.Append(50202000, "Resumen General", "Muestra saldos")
        self.s20cco.Append(50202500, "Listado de Saldos", "Listado de 
los saldos de las Ctas Ctes")
        self.s20cco.Append(50203000, "Cierre de mes", "Hace el cierre de 
todo el mes")
        self.cob.AppendMenu(50200000, "Cuentas Corrientes", 
self.s20cco,"Cuentas Corrientes de Cobradores")
        self.cob.Enable(50200000, False)
        self.facnar_menubar.Append(self.cob, "Cobradores")

        # -99- Menu Salir.
        self.Salir = wx.Menu()
        self.Salir.Append(99999999, "Salir", "Salir del programa")
        self.facnar_menubar.Append(self.Salir, "Salir")
       
        # Esto es para la barra de estado.
        self.facnar_statusbar = self.CreateStatusBar(4, wx.ST_SIZEGRIP)

        self.__inicial()           
        self.__set_properties()
        self.__do_layout()
               
        # aca estan los eventos de menu...
        # -10- General.
        self.Bind(wx.EVT_MENU, self.pmen(10181000), id=10181000) # Abm 
Localidades.

        # -20- Comprobantes.
        self.Bind(wx.EVT_MENU, self.pmen(20102000), id=20102000) # 
Facturas Consultas.
        self.Bind(wx.EVT_MENU, self.pmen(20102500), id=20102500) # 
Facturas Resumen.
        self.Bind(wx.EVT_MENU, self.pmen(20151000), id=20151000) # 
Recibos Emite Nuevos.
        self.Bind(wx.EVT_MENU, self.pmen(20152000), id=20152000) # 
Recibos Consultas.
        self.Bind(wx.EVT_MENU, self.pmen(20152500), id=20152500) # 
Recibos Resumen.
        self.Bind(wx.EVT_MENU, self.pmen(20202000), id=20202000) # 
N.Debito Consultas.
        self.Bind(wx.EVT_MENU, self.pmen(20202500), id=20202500) # 
N.Debito Resumen.
        self.Bind(wx.EVT_MENU, self.pmen(20252000), id=20252000) # 
N.Credito Consultas.
        self.Bind(wx.EVT_MENU, self.pmen(20252500), id=20252500) # 
N.Credito Resumen.
        self.Bind(wx.EVT_MENU, self.pmen(20501000), id=20501000) # 
Resumen Comprob. x Fecha.


        # -40- Clientes.
        self.Bind(wx.EVT_MENU, self.pmen(40100000), id=40100000) # 
Clientes Abm.
        self.Bind(wx.EVT_MENU, self.pmen(40201500), id=40201500) # 
Clientes Resumen p/Cli.
        self.Bind(wx.EVT_MENU, self.pmen(40202000), id=40202000) # 
Clientes Res.Gral.
        self.Bind(wx.EVT_MENU, self.pmen(40203000), id=40203000) # 
Clientes Cierre Mes.
       
        # Error y Salir.
        self.Bind(wx.EVT_MENU, self.atalo, id=99999999) # Salir
        self.Bind(wx.EVT_CLOSE, self.datalo) # Salir
        # wx.EVT_WINDOW_DESTROY(self,self.datalo)  # Es para cuando sale 
es lo mismo que el boton cerrar...

    def __inicial(self):
        db = ab_sql(mios_usql,mios_psql)
        # Leo los controles.
        rcontrol = sql03(db,'select * from controles where %s',[1])
        if rcontrol == None:
            print "ERROR, No hay registro de controles."
            sys.exit(1)
       
        # Verificamos que el sistema este activo...
        if rcontrol[4] <> 'N':  # N es sistema normal...
            wx.Bell()
            dlg = wx.MessageDialog(self, 'En este momento el sistema 
esta fuera de linea realizando tareas de mantenimiento.\nPor favor 
intente nuevamente en unos instantes.\nGracias','Sistema Cerrado', wx.OK 
|  wx.ICON_INFORMATION | wx.CENTRE)
            if dlg.ShowModal() == wx.ID_OK:
                auditor01([mios_cuser,'Salida Anormal','Salida por 
sistema fuera de linea'])
                self.Close()
                sys.exit(0)

        self.mios_esma = "P.Ant : " + fecha01('0',rcontrol[2],rcontrol[3])
        self.mios_peri = "P. Act.: " + fecha01('0',rcontrol[0],rcontrol[1])
       
        # Leo el usuario...   
        rper = sql03(db,'select ven_nuro,ven_inic,ven_acti,ven_apno from 
vendedores where ven_nuro = %s',[mios_cuser])
        if rper == None:
            print "ERROR, Personal inexistente sale del sistema."
            sys.exit(1)

        db.close()
       
        # Seteo pmios que pasa de programa en programa
        #                    
usuario,usql,psql,mes_actual,año_actual,mes_ant,año_ant
        self.pmios = [mios_cuser,mios_usql , 
mios_psql,rcontrol[0],rcontrol[1],rcontrol[2],rcontrol[3]]

        self.mios_pinic = rper[1]       
        self.cartel = "Facturacion - Usuario: "+ rper[3]

    def __set_properties(self):
        # Propiedades de la pantalla a mostrar.
        self.SetTitle(self.cartel)
        _icon = wx.EmptyIcon()
        _icon.CopyFromBitmap(wx.Bitmap("iconos/ft.ico", wx.BITMAP_TYPE_ANY))
        self.SetIcon(_icon)
        self.facnar_menubar.SetFont(wx.Font(9, wx.TELETYPE, wx.NORMAL, 
wx.NORMAL, 0, "arial"))
        # self.panel_1.SetBackgroundColour(wx.Colour(128, 128, 128))
        # self.SetFont(wx.Font(10, wx.TELETYPE, wx.NORMAL, wx.NORMAL, 0, 
"Serif"))
        # self.SetBackgroundColour(wx.Colour(47, 47, 79))
        # self.SetForegroundColour(wx.Colour(255, 255, 255))
        self.facnar_statusbar.SetStatusWidths([-64, -4, -18, -15])
        # Barra de estado
        facnar_statusbar_fields = ["", self.mios_pinic, self.mios_peri, 
self.mios_esma]
        for i in range(len(facnar_statusbar_fields)):
            
self.facnar_statusbar.SetStatusText(facnar_statusbar_fields[i], i)
        self.facnar_statusbar.SetFont(wx.Font(9, wx.TELETYPE, wx.NORMAL, 
wx.NORMAL, 0, "Serif"))
       
    def __do_layout(self):
        # sizer_1 = wx.BoxSizer(wx.VERTICAL)
        # sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
        # self.SetAutoLayout(True)
        # self.SetSizer(sizer_1)
        # sizer_1.Fit(self)
        # sizer_1.SetSizeHints(self)
        self.Layout()

    # Procesa los menues
    def pmen(self, codigo):
        def genericProc(event):
            pr=getattr(__import__('f'+str(codigo)),'p'+str(codigo))
            win = pr(self.pmios, self, -1, "")
            # win.CenterOnParent()
            win.Show(True)
        return genericProc
               
    def nohay(self, event):
        dlg = wx.MessageDialog(self, 'Esta Opcion no esta habilitada.',
                'ATENCION !!!', wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
                #wx.YES_NO | wx.OK | wx.NO_DEFAULT | wx.CANCEL | 
wx.ICON_INFORMATION)
        dlg.ShowModal()

    def datalo(self,event):
        pass
   
    def atalo(self, event):       
        # wx.Bell()
        dlg = wx.MessageDialog(self, 'Desea salir del sistema?',
                'ATENCION !!!', wx.OK | wx.CANCEL | wx.ICON_QUESTION | 
wx.CENTRE)
                #wx.YES_NO | wx.OK | wx.NO_DEFAULT | wx.CANCEL | 
wx.ICON_INFORMATION)
        if dlg.ShowModal() == wx.ID_OK:
            auditor01([mios_cuser,'Salida normal',''])
            self.Close()
            self.Destroy()
            sys.exit(0)

# Fin de la clase

# Pantalla Que pide el ingreso de la clave del sistema!
class Dingreso(wx.Dialog):
    def __init__(self, *args, **kwds):
        kwds["style"] = wx.DEFAULT_DIALOG_STYLE
       
        db = ab_sql(mios_usql,mios_psql)
        rcontrol = sql03(db,'select * from controles where %s',[1])
        if rcontrol == None:
            print "ERROR, No hay registro de controles."
            sys.exit(1)
           
        db.close()
        mendat = "Sistema en Prueba"
        menver = "Version : " + str(mios_version)
       
        # Variables del programa...
        self.vuelta = 1
        mensa = "               Intento " + str(self.vuelta) + "/3"
       
        wx.Dialog.__init__(self, *args, **kwds)
        self.panel_3 = wx.Panel(self, -1)
        self.tl_01 = wx.StaticText(self.panel_3, -1, "Sistema de 
Facturacion")
        self.bitmap_2 = wx.StaticBitmap(self.panel_3, -1, 
wx.Bitmap("iconos/fondo.jpg", wx.BITMAP_TYPE_ANY))
        self.tl_02 = wx.StaticText(self.panel_3, -1, menver)
        self.tl_03 = wx.StaticText(self.panel_3, -1, "Programador: Ariel 
Nardelli")
        self.tl_90 = wx.StaticText(self.panel_3, -1, mendat)
        self.tl_91 = wx.StaticText(self.panel_3, -1, "Copyright : 2005")
        self.tl_10 = wx.StaticText(self, -1, "")
        self.tl_11 = wx.StaticText(self, -1, "Clave : ")
        self.tc_clave = wx.TextCtrl(self, 1, "", 
style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB|wx.TE_PASSWORD)
        self.bt_buscar = wx.BitmapButton(self, 2, 
wx.Bitmap("iconos/buscar.gif", wx.BITMAP_TYPE_ANY))
        self.bt_buscar.SetToolTipString("Busca la clave ingresada")
        self.bt_salir = wx.BitmapButton(self, 3, 
wx.Bitmap("iconos/salir.gif", wx.BITMAP_TYPE_ANY))
        self.bt_salir.SetToolTipString("Sale del sistema")
        self.tb_mensajes = wx.StaticText(self, -1, mensa)
       
        self.__set_properties()
        self.__do_layout()

        # botones y texboxs
       
        # Boton Salir
        wx.EVT_BUTTON (self, 3, self.atalo)
        # EVT_WINDOW_DESTROY(self,self.atalo)  # Es para cuando sale es 
lo mismo que el boton cerrar...

        # Boton Buscar
        wx.EVT_BUTTON (self, 2, self.bclave)

        # TC_clave
        wx.EVT_TEXT_ENTER(self, 1,self.ev_enter_tc_clave)
        wx.EVT_TEXT(self, 1,self.ev_text_tc_clave)
        wx.EVT_CHAR(self.tc_clave, self.ev_char_tc_clave)

    def __set_properties(self):
        # Letras que se usan "por defecto".
        # wx.BOLD = 92
        # wx.NORMAL = 90
        # Tamanio, Negrita o Normal, Letra, Alto que usa.
        titu01 = [13,92,"arial",13] # Es para los titulos grandes
        # labe01 = [9,92,"verdana",11] # Para los Labels fijos.
        labe02 = [9,90,"verdana",11] # Para los Labels fijos.
        # boto01 = [8,92,"verdana",10] # Para los Botones.
        # cbox01 = [9,90,"verdana",11] # Para los Combo Box.
        text01 = [9,90,"verdana",17] # Para los Texbox Normales...
        # grid01 = [9,90,"verdana",11] # Para los Grdis Normales...#

        self.SetTitle("Ingreso al Sistema")
        _icon = wx.EmptyIcon()
        _icon.CopyFromBitmap(wx.Bitmap("iconos/ft.ico", wx.BITMAP_TYPE_ANY))
        self.SetIcon(_icon)
        self.SetSize((420, 278))
        self.SetFont(wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, 
""))   
        self.tl_01.SetForegroundColour(wx.Colour(255, 255, 255))
        self.tl_01.SetSize((28, titu01[3]))
        self.tl_01.SetFont(wx.Font(titu01[0], wx.TELETYPE, wx.NORMAL, 
titu01[1], 0, titu01[2]))
        self.tl_02.SetForegroundColour(wx.Colour(255, 255, 255))
        self.tl_02.SetSize((28, labe02[3]))
        self.tl_02.SetFont(wx.Font(labe02[0], wx.TELETYPE, wx.NORMAL, 
labe02[1], 0, labe02[2]))
        self.tl_03.SetForegroundColour(wx.Colour(255, 255, 255))
        self.tl_03.SetSize((28, labe02[3]))
        self.tl_03.SetFont(wx.Font(labe02[0], wx.TELETYPE, wx.NORMAL, 
labe02[1], 0, labe02[2]))
        self.tl_90.SetForegroundColour(wx.Colour(255, 255, 255))
        self.tl_90.SetSize((28, labe02[3]))
        self.tl_90.SetFont(wx.Font(labe02[0], wx.TELETYPE, wx.NORMAL, 
labe02[1], 0, labe02[2]))
        self.tl_91.SetForegroundColour(wx.Colour(255, 255, 255))
        self.tl_91.SetSize((28, labe02[3]))
        self.tl_91.SetFont(wx.Font(labe02[0], wx.TELETYPE, wx.NORMAL, 
labe02[1], 0, labe02[2]))
        self.panel_3.SetBackgroundColour(wx.Colour(47, 47, 79))
        self.tl_10.SetSize((28, titu01[3]))
        self.tl_10.SetFont(wx.Font(titu01[0], wx.TELETYPE, wx.NORMAL, 
titu01[1], 0, titu01[2]))
        self.tl_11.SetSize((28, titu01[3]))
        self.tl_11.SetFont(wx.Font(titu01[0], wx.TELETYPE, wx.NORMAL, 
titu01[1], 0, titu01[2]))
        self.tc_clave.SetMinSize((48, text01[3]))
        self.tc_clave.SetFont(wx.Font(text01[0], wx.TELETYPE, wx.NORMAL, 
text01[1], 0, text01[2]))
        self.tc_clave.SetFocus()
        self.bt_buscar.SetSize(self.bt_buscar.GetBestSize())
        self.bt_buscar.Enable(False)
        self.bt_salir.SetSize(self.bt_salir.GetBestSize())
        self.tb_mensajes.SetFont(wx.Font(text01[0], wx.TELETYPE, 
wx.NORMAL, text01[1], 0, text01[2]))

    def __do_layout(self):
        grid_sizer_1 = wx.FlexGridSizer(3, 2, 0, 0)
        grid_sizer_2 = wx.FlexGridSizer(3, 1, 0, 0)
        sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
        grid_sizer_6 = wx.FlexGridSizer(3, 1, 2, 2)
        grid_sizer_7 = wx.FlexGridSizer(2, 2, 2, 2)
        grid_sizer_6.Add(self.tl_01, 0, 
wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 3)
        grid_sizer_6.Add(self.bitmap_2, 0, 
wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_7.Add(self.tl_02, 0, wx.ALL, 3)
        grid_sizer_7.Add(self.tl_03, 0, wx.ALL, 3)
        grid_sizer_7.Add(self.tl_90, 0, wx.ALL, 3)
        grid_sizer_7.Add(self.tl_91, 0, 
wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 3)
        grid_sizer_6.Add(grid_sizer_7, 1, 
wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
        self.panel_3.SetAutoLayout(True)
        self.panel_3.SetSizer(grid_sizer_6)
        grid_sizer_6.Fit(self.panel_3)
        grid_sizer_6.SetSizeHints(self.panel_3)
        grid_sizer_1.Add(self.panel_3, 1, 
wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_1.Add((20, 200), 0, 0, 0)
        grid_sizer_2.Add(self.tl_10, 0, 
wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 3)
        sizer_1.Add((30, 20), 0, 0, 0)
        sizer_1.Add(self.tl_11, 0, 
wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 3)
        sizer_1.Add((20, 20), 0, 0, 0)
        sizer_1.Add(self.tc_clave, 0, 
wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 3)
        sizer_1.Add((20, 20), 0, 0, 0)
        sizer_1.Add(self.bt_buscar, 0, 
wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 3)
        sizer_1.Add((20, 20), 0, 0, 0)
        sizer_1.Add(self.bt_salir, 0, 
wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 3)
        grid_sizer_2.Add(sizer_1, 1, 
wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_2.Add(self.tb_mensajes, 0, 
wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 3)
        grid_sizer_2.Add((350, 20), 0, 0, 0)
        grid_sizer_1.Add(grid_sizer_2, 1, 
wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_1.Add((20, 100), 0, 0, 0)
        grid_sizer_1.Add((450, 10), 0, 0, 0)
        grid_sizer_1.Add((2, 1), 0, 0, 0)
        self.SetAutoLayout(True)
        self.SetSizer(grid_sizer_1)
        self.Layout()
        self.Centre()

    def atalo(self, event):
        global mios_cuser
        mios_cuser = 0
        self.Close()

    # Eventos TC_Clave
    # tc_clave, evento text.
    def ev_enter_tc_clave(self,event):  # Este evento no hace nada solo 
saca el enter.
        key = event.GetString()

    # tc_clave, evento text.
    def ev_text_tc_clave(self,event): 
        key = event.GetString()
        if len(key) > 0:
            self.bt_buscar.Enable(True)
        else:
            self.bt_buscar.Enable(False)

    def ev_char_tc_clave(self,event):
        # 353 es F12 y 352 es F11  (f12 avanza, f11 retrocede)
        deja = '0123456789'
        key = event.GetKeyCode()
        if key == 9 or key == 353: # Tecla TAB o F12 Pasa foco.
            self.bt_buscar.SetFocus()
            event.Skip()
        if key == 352: # F11 retrocede a nada asi que no hace nada.
            self.tc_clave.SetFocus()
            event.Skip()
        if key == 13: # Enter directamente busca el dato
            self.bclave('aa')
            event.Skip()
        if key <  wx.WXK_SPACE or key == wx.WXK_DELETE or key > 255:
            event.Skip()
            return
        if chr(key) in deja:
            event.Skip()

    # Busca la clave y si hay cierra las ventanas.
    def bclave(self, event):
        self.vuelta = self.vuelta + 1
        global mios_cuser,mios_usql,mios_psql
        mios_cuser = 0
        tmp_clave = self.tc_clave.GetValue()
        # Buscamos la clave..
        db = ab_sql(mios_usql,mios_psql)
        rper = sql03(db,'select 
ven_clav,ven_nuro,ven_acti,ven_myus,ven_mypa from vendedores where 
ven_clav = %s',[tmp_clave])
        db.close()
        if rper == None: # Error no hay clave.
            self.tc_clave.SetValue('')
            if self.vuelta > 3:
                auditor01([999,'Salida por clave erronea',''])
                self.atalo('forzado')
                return
            self.tb_mensajes.SetLabel("Incorrecto!!!   Intento " + 
str(self.vuelta) + "/3")
            return

        # Veamos si per_acti, per_acce me permiten validar el ingreso...
        if rper[2] == 'S':  # User Normal o Total.
            mios_cuser = rper[1]
            mios_usql = rper[3]
            mios_psql = rper[4]
            # grabo registro auditor
            auditor01([mios_cuser,'Ingreso al sistema',''])
            self.Close()
       
        # Nada es error, ver que hacer...
        if self.vuelta > 3:
            auditor01([999,'Salida por clave erronea',''])
            self.atalo('forzado')
            return
        self.tb_mensajes.SetLabel("Incorrecto!!!   Intento " + 
str(self.vuelta) + "/3")
       
# Clase que corre el programa en si.
class facnarppal(wx.App):
    def OnInit(self):
        # Pedimos clave de ingreso y en base a eso vemos que hacer...
        wx.InitAllImageHandlers()
        facnarw = Dingreso(None, -1, "")
        # self.SetTopWindow(mariow)
        facnarw.ShowModal()
        if mios_cuser == 0: # Sale por clave mala.
            sys.exit(0)

        # Clave correcta, a correr!!!
        wx.InitAllImageHandlers()
        facnarw = facnar()
        facnarw.Show(True)
        self.SetTopWindow(facnarw)
        return True

if __name__ == "__main__":
    facnar = facnarppal(0)
    facnar.MainLoop()




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