[pyar] WxPython - Dudas de principiante.
matiasgsanchez en gmail.com
matiasgsanchez en gmail.com
Lun Mar 21 17:11:20 ART 2011
Buenas a todos, tuve un poco de tiempo y decidì comenzar a migrar un
proyecto que tengo hecho en .NET C# a python. Sin sentido alguno,
solamente para aprender. Hice algunas cosas en consola, pero ahora
cuando me topè con Wxpython, algunas cosas resultaron un poco
extrañas.
Estoy usando Eclipse + Pydev y wxFormBuilder.
Tiro algunas preguntas puntuales, y lògicamente cualquier crìtica
constructiva sobre como desarrollar y buenas pràcticas serà
bienvenida.
Primero:
Porque el EventHandler txtChange, en el siguiente caso se dispara y en
el segundo caso no? (No tengamos en cuenta que el MessageBox no para
de mostrarse nunca xD, es un bug premeditado)
---------------------CASO1----------------------------
import wx
from wx import xrc
import sys
class MainFrame(object):
def __init__(self, xml):
self.xml = xml
self.frame = xml.LoadFrame(None,'MyFrame1')
self.frame.Bind(wx.EVT_BUTTON, self.btnClick,
id=xrc.XRCID('btnBoton1'))
self.txtTextBox = xrc.XRCCTRL(self.frame, 'txtTextBox')
self.txtTextBox.Bind(wx.EVT_SET_FOCUS, self.txtChange)
self.txtTextBox.SetValue('Valor de prueba')
self.frame.Show()
def btnClick(self, evt):
ret = wx.MessageBox('Salir?', 'Question', wx.YES_NO | wx.NO_DEFAULT)
if ret == wx.YES:
self.frame.Destroy();
sys.exit(0)
def txtChange(self, evt):
wx.MessageBox('Ventana prueba','Ventana')
class proyPrueba(wx.App):
def OnInit(self):
xml = xrc.XmlResource('filePrueba.xrc')
self.MainFrame = MainFrame(xml)
return True
if __name__ == '__main__':
app = proyPrueba(0)
app.MainLoop()
------------------------------------CASO2----------------------------------------
Para simplificar, lo unico que modifiquè fue la asignaciòn de la
variable txtTextBox. Osea, directamente creo el eventhandler en una
linea.
(http://wiki.wxpython.org/index.cgi/XRCTutorial)
No funciona el wx.EVT_SET_FOCUS pero si el wx.EVT_BUTTON. Algùn error
conceptual que no estè teniendo en cuenta?
import wx
from wx import xrc
import sys
class MainFrame(object):
def __init__(self, xml):
self.xml = xml
self.frame = xml.LoadFrame(None,'MyFrame1')
self.frame.Bind(wx.EVT_BUTTON, self.btnClick,
id=xrc.XRCID('btnBoton1'))
self.frame.Bind(wx.EVT_SET_FOCUS, self.txtChange,
id=xrc.XRCID('txtTextBox'))
self.frame.Show()
def btnClick(self, evt):
ret = wx.MessageBox('Salir?', 'Question', wx.YES_NO | wx.NO_DEFAULT)
if ret == wx.YES:
self.frame.Destroy();
sys.exit(0)
def txtChange(self, evt):
wx.MessageBox('Ventana prueba','Ventana')
class proyPrueba(wx.App):
def OnInit(self):
xml = xrc.XmlResource('filePrueba.xrc')
self.MainFrame = MainFrame(xml)
return True
if __name__ == '__main__':
app = proyPrueba(0)
app.MainLoop()
Segundo:
Hay alguna manera de lograr que el autocompletado funcione tambien
para las variables que van a asumir el tipo en tiempo de ejecuciòn?.
No se si me explico correctamente. Mejor ejemplifico.
La variable txtTextBox que uso en el primer ejemplo, para guardar la
referencia al objeto textBox, cuando tipeo "txtTextBox.(punto)" no
tira ninguna propiedad del objeto. Ahora bien, para ver las
propiedades disponibles del textbox estoy haciendo "wx.TextCtrl....".
En ese caso si me muestra las props y me tengo que fijar la que estoy
buscando, copiar pegar. Es medio molesto, seguramente hay alguna otra
alternativa. Alguien que no quiera verme maldecir en todos los
idiomas, me darìa algun consejo?
Dudas ya està. Ahora queda el espacio para aquellos que quieran
recomendarme algo:
Tips:
1) Maneras de definiciòn de handlers simples.
2) Yo estoy generando el archivo xrc y levantandolo como recurso. Es
correcto? Hay alguna manera mas facil?
3) etc, etc, etc...
Desde ya gracias. Deberìa haber preguntado todas estas cosas en la
Pyar de BsAs que habia muy buena onda, pero sinceramente todavia
estaba sorprendido por la sintaxis nada mas, que no es poco xD.
Salu2 a todos!,
Matias.
More information about the pyar
mailing list