Ver Mensaje Individual
  #5 (permalink)  
Antiguo 21/01/2010, 07:54
Nano-rosario
 
Fecha de Ingreso: abril-2008
Mensajes: 68
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Treeview agregar nodos fuera de la clase

Gracias, ahi lo hice lo que buscaba en realidad nunca habia usado clases gracias a VB 6 que todo funciones pero sin darme cuenta las creaba cuando ponia nodo = new ctreeviewnode....
entonces solocione el error creando una clase en python q me devuelva un nodo...
el objetivo de una tabla de este estilo

id-nombre-parent
1 - Padre1-0
2 - Padre2-0
3 - Padre3-0
4 - Hijo1 - 1
5 - Hijo2- 1
6 - subhijo1 - 4

me agrega asi
Padre1
-Hijo1
-Subhijo1
-Hijo2
Padre2
Padre3

y asi recursivamente.... como se ve en la imagen


Codigo python:
Código:
import wx
import mdDB

class frm_main(wx.Frame):
    def __init__(self, *args, **kwds):
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.window_1 = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER)
        self.window_1_pane_1 = wx.Panel(self.window_1, -1)
        self.tree = wx.TreeCtrl(self.window_1_pane_1, -1, style=wx.TR_HAS_BUTTONS|wx.TR_HIDE_ROOT|wx.TR_DEFAULT_STYLE)
        self.window_1_pane_2 = wx.Panel(self.window_1, -1)
        self.frame_1_statusbar = self.CreateStatusBar(1, 0)
        
        # Tool Bar
        self.frame_1_toolbar = wx.ToolBar(self, -1)
        self.SetToolBar(self.frame_1_toolbar)
        # Tool Bar end
        
        # Menu Bar
        self.frame_1_menubar = wx.MenuBar()
        self.SetMenuBar(self.frame_1_menubar)
        # Menu Bar end

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        self.SetTitle("SM ERP")
        _icon = wx.EmptyIcon()
        #_icon.CopyFromBitmap(wx.Bitmap("C:\\Documents and Settings\\podio\\Escritorio\\MARIANO\\SM_ERP-local\\version mariano\\recursos\\16 x 16\\update.ico", wx.BITMAP_TYPE_ANY))
        self.SetIcon(_icon)
        self.frame_1_statusbar.SetStatusWidths([-1])
        # statusbar fields
        frame_1_statusbar_fields = ["frame_1_statusbar"]
        for i in range(len(frame_1_statusbar_fields)):
            self.frame_1_statusbar.SetStatusText(frame_1_statusbar_fields[i], i)
        self.frame_1_toolbar.Realize()
 
    def __do_layout(self):
        sizer_1 = wx.GridSizer(1, 1, 0, 0)
        sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_2.Add(self.tree, 1, wx.EXPAND, 0)
        self.window_1_pane_1.SetSizer(sizer_2)
        self.window_1.SplitVertically(self.window_1_pane_1, self.window_1_pane_2)
        sizer_1.Add(self.window_1, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        self.Layout()
        self.Centre()
        # end wxGlade

# end of class frm_main
#
class  Tnodo (object):
    instance = None      
    def __new__(cls, *args, **kargs):
        if cls.instance is None:
            cls.instance = object.__new__(cls, *args, **kargs)
        return cls.instance
    
def AgregaFO(parent,chield,nod):
    nodo = Tnodo()
    conn = mdDB.GestorBD()    
    sql="Select Id,Nombre From SM_FO where parent ='%s'" % parent
    resultado= conn.execute(sql)
    for registro in resultado:
        if chield == "0":
            nodo = frame_1.tree.AppendItem(root,registro[1])
        else: 
            nodo = frame_1.tree.AppendItem(nod,registro[1])
        AgregaFO(registro[0],"1",nodo) 
        
if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_1 = frm_main(None, -1, "")
    app.SetTopWindow(frame_1)
    root = frame_1.tree.AddRoot('root')
    frame_1.tree.SetItemHasChildren(root)
    AgregaFO("0","0",root)
    frame_1.Show()
    app.MainLoop()
Si ven que se podria hacer de otra forma, por favor, notificarmelo..... estoy tratando de aprender a programar enserio, no a lo que estaba acostumbrado en vb 6, que por mas que tenga un aspecto profesional el resultado, no tenia nada de esto.

Saludos y gracias Razpeitia