recuperar variables en python

fallout20xx

Ante todo buenas!

Os explico mi problema, acabo de volver de vacaciones y mi cerebro aun esta un poco mustio, y al retomar la programacion se un programa larguisimo me he quedado un poco atascado, vereis, tengo una clase que monta un grid y lo rellena con muchos datos "un pastizal de consultas sql" y ya he terminado esa parte de la programacion, solo es un grid donde se representan valores, pero ahora quiero que al hacer doble clic en una celda se habra una ventanita y me pida unos datos, le das a ok y el te los escriba en el servidor sql y ademas lo represente en el grid... bien pues he montado para que cuando haces doble clic se cree la ventanita toda cuca con las opciones que quiero pero no se como hacer para que cuando le de a aceptar la clase principal recupere los valores que se han introducido en la ventanita... os paso una simplificacion del codigo:

Esta seria la ventana auxiliar:

class Cuantos(wx.Dialog):
    def __init__(self, parent, id, Texto):
        # begin wxGlade: MyDialog.__init__
        wx.Dialog.__init__(self, parent, id)
        self.parent = parent
        self.label_1 = wx.StaticText(self, -1, "¿Cuantos %s?" % Texto)
        self.label_2 = wx.StaticText(self, -1, "Cod Prov:")
        self.text_ctrl_1 = wx.TextCtrl(self, -1, "")
        self.label_3 = wx.StaticText(self, -1, "Cod Cli:")
        self.text_ctrl_2 = wx.TextCtrl(self, -1, "")
        self.label_4 = wx.StaticText(self, -1, "Fecha carga:")
        self.datepicker_ctrl_1 = wx.DatePickerCtrl(self, -1)
        self.button_1 = wx.Button(self, -1, "Aceptar")
        self.spin_ctrl_1 = FS.FloatSpin(self, -1, min_val=None, max_val=None,
                                        digits= 2,  increment=0.0, extrastyle=FS.FS_CENTRE)
           
self.Bind(wx.EVT_BUTTON, self.Clic, self.button_1) self.__set_properties() self.__do_layout() # end wxGlade def __set_properties(self): # begin wxGlade: MyDialog.__set_properties self.SetTitle("¿Cuantos?") self.SetSize((103, 200)) self.spin_ctrl_1.SetMinSize((130, 25)) self.text_ctrl_1.SetMinSize((100, 25)) self.text_ctrl_2.SetMinSize((100, 25)) # end wxGlade def __do_layout(self): # begin wxGlade: MyDialog.__do_layout sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_1.Add(self.label_1, 0, 0, 0) sizer_1.Add(self.spin_ctrl_1, 0, 0, 0) sizer_1.Add(self.label_2, 0, 0, 0) sizer_1.Add(self.text_ctrl_1, 0, 0, 0) sizer_1.Add(self.label_4, 0, 0, 0) sizer_1.Add(self.datepicker_ctrl_1, 0, 0, 0) sizer_1.Add(self.label_3, 0, 0, 0) sizer_1.Add(self.text_ctrl_2, 0, 0, 0) sizer_1.Add((100, 10), 0, 0, 0) sizer_1.Add(self.button_1, 0, wx.ALL, 10) self.SetSizer(sizer_1) self.Layout() # end wxGlade def Clic(self, evento): self.PreCarPro = self.text_ctrl_1.GetValue() self.PreCarCli = self.text_ctrl_2.GetValue() self.PreCarFec = self.datepicker_ctrl_1.GetValue() self.PreCarCan = self.spin_ctrl_1.GetValue() #self.Close()

Y este el pedazo de la clase principal en la que hago referencia a ella:

    def CarClic(self, evento):
        Col = evento.GetCol()
        if (Col >= self.PreCarStartPos) and self.Mod:
            Fil = evento.GetRow() 
            if (Fil+1) <= len(self.articulos):
                hist = self.CarGrid.GetCellValue(Fil, Col)
                Articulo = self.CarGrid.GetRowLabelValue(Fil)
                if hist == '':                    
cuan = Cuantos(self, -1, "Palets") cuan.Show()
else: dlg = wx.SingleChoiceDialog( self, '¿Que quieres hacer?', 'Elige...', ['Añadir', 'Modificar', 'Eliminar'], wx.CHOICEDLG_STYLE) if dlg.ShowModal() == wx.ID_OK: repo = dlg.GetStringSelection() dlg.Destroy() if repo == 'Añadir': cuan = Cuantos(self, -1, "Palets") cuan.Show() elif repo == 'Modificar': pass elif repo == 'Eliminar': pass else: pass else: pass

solo quiero saber ¿¿como leches recupero los valores de la primera clase?? estoy atascado y esto es lo ultimo que me falta para acabar el jodido programa... llevo mas de medio año con las malditas consultas y estoy ansioso por acabar ya...

Un saludo y gracias por adelantado

dr_Rouman

Pues de wx no sé nada, pero seguro que puedes registrar algún tipo de callback cuando se haga click en alguno de los botones del diálogo. Sólo es cuestión de, por ejemplo, almacenar el valor en la clase y en el callback acceder.

Googleando así un poco creo que deberías buscar por "event binding" ; D

fallout20xx

Al fin!! xD bueno a ver al final no es muy complicado de hacer pero hay que saber como, lo dejo aqui por si le sirve a alguien por que la verdad es que es una putada cuando no lo encuentras, al final era tan simple como cambiar el boton de la ventanita para poner uno con la wx.ID_OK de forma que cuando se le hace clic desde fuera manda la señal ID_OK atraves del modal y entondes sigue la ejecucion del programa principal, os pongo el codigo anterior modificado para que funcione... he tenido un orgasmo cerebral cuando ha funcionado xD

class Cuantos(wx.Dialog):
    def __init__(self, parent, id, Texto):
        # begin wxGlade: MyDialog.__init__
        wx.Dialog.__init__(self, parent, id)
        self.parent = parent
        self.label_1 = wx.StaticText(self, -1, &quot;¿Cuantos %s?&quot; % Texto)
        self.label_2 = wx.StaticText(self, -1, &quot;Cod Prov:&quot;)
        self.text_ctrl_1 = wx.TextCtrl(self, -1, &quot;&quot;)
        self.label_3 = wx.StaticText(self, -1, &quot;Cod Cli:&quot;)
        self.text_ctrl_2 = wx.TextCtrl(self, -1, &quot;&quot;)
        self.label_4 = wx.StaticText(self, -1, &quot;Fecha carga:&quot;)
        self.datepicker_ctrl_1 = wx.DatePickerCtrl(self, -1)
        self.button_1 = wx.Button(self, wx.ID_OK, &quot;&amp;OK&quot;)
        self.button_1.SetDefault()
        self.spin_ctrl_1 = FS.FloatSpin(self, -1, min_val=None, max_val=None,
                                        digits= 2,  increment=0.0, extrastyle=FS.FS_CENTRE)

    self.Bind(wx.EVT_BUTTON, self.Clic, self.button_1)
    self.__set_properties()
    self.__do_layout()
    # end wxGlade

def __set_properties(self):
    # begin wxGlade: MyDialog.__set_properties
    self.SetTitle(&quot;¿Cuantos?&quot;)
    self.SetSize((103, 250))
    self.spin_ctrl_1.SetMinSize((130, 25))
    self.text_ctrl_1.SetMinSize((100, 25))
    self.text_ctrl_2.SetMinSize((100, 25))
    # end wxGlade

def __do_layout(self):
    # begin wxGlade: MyDialog.__do_layout
    sizer_1 = wx.BoxSizer(wx.VERTICAL)
    sizer_1.Add(self.label_1, 0, 0, 0)
    sizer_1.Add(self.spin_ctrl_1, 0, 0, 0)
    sizer_1.Add(self.label_2, 0, 0, 0)
    sizer_1.Add(self.text_ctrl_1, 0, 0, 0)
    sizer_1.Add(self.label_4, 0, 0, 0)
    sizer_1.Add(self.datepicker_ctrl_1, 0, 0, 0)
    sizer_1.Add(self.label_3, 0, 0, 0)
    sizer_1.Add(self.text_ctrl_2, 0, 0, 0)
    sizer_1.Add((100, 10), 0, 0, 0)
    sizer_1.Add(self.button_1, 0, wx.ALL, 10)
    self.SetSizer(sizer_1)
    self.Layout()
    # end wxGlade

def Clic(self, evento):
    self.PreCarPro = self.text_ctrl_1.GetValue()
    self.PreCarCli = self.text_ctrl_2.GetValue()
    self.PreCarFec = self.datepicker_ctrl_1.GetValue()
    self.PreCarCan = self.spin_ctrl_1.GetValue()
    self.EndModal(wx.ID_OK)
    self.Destroy()
   def CarClic(self, evento):
        Col = evento.GetCol()
        if (Col &gt;= self.PreCarStartPos) and self.Mod:
            Fil = evento.GetRow() 
            if (Fil+1) &lt;= len(self.articulos):
                hist = self.CarGrid.GetCellValue(Fil, Col)
                Articulo = self.CarGrid.GetRowLabelValue(Fil)
                if hist == '':                    
cuan = Cuantos(self, -1, &quot;Palets&quot;) cuan.Show() if cuan.ShowModal() == wx.ID_OK: A = cuan.PreCarPro B = cuan.PreCarCli C = cuan.PreCarFec D = cuan.PreCarCan print &quot;%s %s %s %s&quot; % (A,B,C,D) # cuan.Close() else: dlg = wx.SingleChoiceDialog( self, None, '¿Que quieres hacer?', 'Elige...', ['Añadir', 'Modificar', 'Eliminar'], wx.CHOICEDLG_STYLE) if dlg.ShowModal() == wx.ID_OK: repo = dlg.GetStringSelection() dlg.Destroy()
if repo == 'Añadir': cuan = Cuantos(self, -1, &quot;Palets&quot;) cuan.Show() if cuan.ShowModal() == wx.ID_OK: A = cuan.PreCarPro B = cuan.PreCarCli C = cuan.PreCarFec D = cuan.PreCarCan print &quot;%s %s %s %s&quot; % (A,B,C,D) # cuan.Close() elif repo == 'Modificar': pass elif repo == 'Eliminar': pass
else: pass else: pass

Gracias por la info Dr_Rouman al final ya ves... era cuestion de darle vueltas a las funciones de wx xD

Un saludo

Usuarios habituales

  • fallout20xx
  • dr_Rouman