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