It looks better
Now I’m finish to make some fixes to share my code.
About that i would like to share you the code I used to create this GUI

from easyDialog import Ctrl
from Modulos.coreMod import _BasePanel
from imagenes import imageEmbed
import wx
_ = wx.GetTranslation
imag= imageEmbed(size=(16, 16))
class Panel(_BasePanel):
name = _(‘FOR-MAN-001’)# formato de mantenimiento
image = imag.dashboard
def init(self, parent, id = wx.ID_ANY, *args, **kwargs):
_BasePanel.init(self, parent, id, *args, **kwargs)
mp, st, tc, bm = Ctrl.MakePairs, Ctrl.StaticText, Ctrl.TextCtrl, Ctrl.BitmapButton
sb, spa, flex, grid = Ctrl.StaticBitmap, Ctrl.Spacer, Ctrl.FlexGridSizer, Ctrl.GridSizer
imag = imageEmbed(size=(590, 80))
header = mp([sb(imag.formulario),
mp([st(‘Especificaciones’)], horzCenter=True),
],
horz=wx.VERTICAL,
flag=wx.EXPAND|wx.ALL)
flexi = flex([st(‘Año del modelo’), st(‘Odómetro’),
Ctrl.IntTextCtrl(‘2016’).tooltip(_(‘Año de fabricación’)),
mp([tc(size=(125,-1)).tooltip(_(‘Valor inicial\ndel odómetro’)),
Ctrl.Choice([‘Kilometros’,‘Millas’],0)],
border=0),
st(‘Fabricante’), st(‘Placa’),
tc(‘’).tooltip(_(‘Del vehículo’)),
tc(‘’, size=wx.Size(210, -1)).tooltip(_(‘Número de la\nplaca del automotor’)),
st(‘Modelo’), st(‘Código’),
tc(‘’).tooltip(_(‘Modelo acorde\ncon el fabricante’)),
tc(‘’, size=wx.Size(210, -1)).tooltip(_(‘Que se le asignará\nen la empresa para\nidentificarlo’)),
st(‘Color’), st(‘Conductor’),
tc(‘Negro’).tooltip(_(‘Color actual’)),
Ctrl.User().tooltip(_(‘Seleccione un usuario\nRegistrado en la base’)),
], 2)
body_left = mp([flexi],
proportion=0,
horzCenter=True,
title= _(‘Información del vehículo’),
flag=wx.ALL,
)
imag = imageEmbed(size=(200, 200))
body_rigth = mp([sb(imag.equipo)], title=_(‘Imágen del vehículo’), flag=wx.ALL|wx.EXPAND)
body = mp([body_left, body_rigth], flag=wx.ALL|wx.EXPAND, horzCenter=True)
body_midle_top = mp([flex([st(_(‘Numero de Tarjeta’)),
tc(size=wx.Size(117,-1)).tooltip(_(‘Tarjete de operación’)),
st(_(‘Fecha de vencimiento’)), Ctrl.DatePickerCtrl(size=wx.Size(117, -1)),
],2)],
horz=wx.VERTICAL, flag=wx.EXPAND, title=_(‘Licencia’))
body_midle_bottom = mp([flex([st(_(‘Empresa/compañía’)),
tc(size=wx.Size(125,-1)).tooltip(_(‘Empresa que aseguró\nel vehículo’)),
st(_(‘Número de\nla cuenta’)),
tc(size=wx.Size(125,-1)).tooltip(_(‘O el número\ndel seguro’)),
st(_(‘Fecha Vencimiento’)),
Ctrl.DatePickerCtrl(size=wx.Size(125,-1)).\
tooltip(_(‘Fecha de vencimiento\ndel seguro’)),
],2)
],
title=_(‘Aseguradora’))
body_midle_left = mp([body_midle_top, body_midle_bottom], horz=wx.VERTICAL, flag=wx.EXPAND)
body_mid_rigtop = mp([flex([st(_(‘Motor’)),
tc(size=wx.Size(205,-1)).tooltip(_(‘cm cúbicos\nnúmero de válvulas’)),
st(_(‘Transmisión’)),
Ctrl.Choice([‘Mecánica’, ‘Automática’],0, size=wx.Size(205,-1)).\
tooltip(_(‘tipo de transmisión\ndel vehículo’)),
st(_(‘Tamaño de\nla llanta’)),
tc(size=wx.Size(205,-1)),
],2)
],
title=_(‘Mecanica’))
body_mid_rigbottom = mp([tc(style=wx.TE_MULTILINE,size=wx.Size(290, 56)).\
tooltip(_(‘Observaciones con respecto\nal vehículo’))],
flag=wx.EXPAND|wx.ALL, title=_(‘Observaciones’))
body_midle_rigth = mp([body_mid_rigtop, body_mid_rigbottom], horz=wx.VERTICAL, flag=wx.EXPAND)
body_midle = mp([body_midle_left, body_midle_rigth], flag=wx.ALL, horzCenter=True)
main_sizer = mp([header, body, body_midle],
title=_(‘Datos básicos’),
horzCenter=True,
horz=wx.VERTICAL)
self.Sizer= main_sizer
pnl= Panel(ntb)
ntb.AddPage(pnl, pnl.name, True)
wx.MessageBox(‘{}’.format(pnl.Value))
``
I hope It’s not too complicated, but you have to consider to obtain Its values you just have to use the command
pnl.Value
In the other hand you can also use it to set the GUI values.
pnl.Value = [‘some list of values’,dateObject,‘’,…,]

It would be nice to hear an expert opinion.
···
El viernes, 18 de noviembre de 2016, 12:24:46 (UTC-5), Jack Burridge escribió:
Ahh! Something like this:
value_events = {
wx.SpinCtrl: wx.EVT_SPIN,
wx.Slider: wx.EVT_SLIDER,
wx.CheckBox: wx.EVT_CHECKBOX,
wx.ToggleButton: wx.EVT_TOGGLEBUTTON,
wx.TextCtrl: wx.EVT_TEXT
}
class ValueChanger(ValueWatcher):
def init(self, widget, watchable, watcher):
event = [value_events[widget_class] for widget_class in value_events if isinstance(widget,widget_class)]
if not event:
raise Exception(‘Widget type is not recognised’)
ValueWatcher.init(self, widget, watchable, watcher)
widget.Bind(event[0], self.on_change)
def on_change(self, event):
self.set_value(self.widget.GetValue())
event.Skip()
``
On Friday, 18 November 2016 13:36:38 UTC, sebastian lópez wrote:
Hello. When I was developing the easyDialog library I attemp to create a fubctuion that identify the control type and and then use an appropiated method, but when you added a new control or a custom control then you have to update It. So I preffer to be moved into a new type of CtrlBase that had a generic property Value, in the case you have a textCtrl the Value return a string in the other hand if you used a listCtrl the Value method return a string with the selected ítem and so on.