Iniciar sesión

Ver la versión completa : [Ayuda] Automatizar copia y restauración de las configuraciones de programas



Dullyboy
27/07/2012, 15:56
Seguramente vaya a renovar pc antes de la subida del iva y no hay cosa que más trabajo me de que dejar todo a mi gusto tras una instalación nueva. Por eso querría saber si alguien conoce algún programa que guarde la configuración de los programas para poder pasarlas al nuevo PC, o sino, consejos de los expertos para hacermelo yo (o una combinación de ambas soluciones). Dado que no se apenas nada de ningún lenguaje de programación, usaría el que me dijeseis, lo único que querría es que pudiese aprovecharlo tanto en Windows (que es para lo que lo quiero ahora) como para linux si acabo de pasarme en el futuro. Gracias.

juanvvc
27/07/2012, 16:36
Windows no te sé decir, así que solo puedo hablarte de Linux.

En Linux hay dos directorios principales para configuraciones:

/etc Aquí está la confiuguración de los programas "importantes" de tu ordenador. Por ejemplo, servidores de archivos, web, seguridad... Lo que se ejecuta en el ordenador sin que nadie le diga nada. Si es un ordenador casero, lo más probable es que la configuración estándar sea la más correcta así que a menos que tengas unas necesidades muy especiales con los servidores, no hace falta que lo conserves.

/home/dulllyboy Aquí está la configuración de los programas que usas tú, además de todos tus archivos personales. Dentro de este directorio hace unos años las configuraciones estaban en directorios separados con nombres que empiezan con un punto (estos directorios suelen ocultarse en gestores de archivos y no salen a menos que lo configures explícitamente). Los programas más antiguos aún lo hace así. Por ejemplo, la configuración de firefox está en el directorio:

/home/dullyboy/.mozilla

Aunque últimamemente se está centralizando la configuración en dos directorios (cuál de estos dos exactamente depende del programa)

/home/dullyboy/.local
/home/dullyboy/.config

Por ejemplo, la configuración de chrome está en

/home/dullyboy/.config/google-chrome

Mientras que la configuración de SuperMeatboy, por decir algún juego, está en:

/home/dullyboy/.local/share/SuperMeatBoy

Resumiendo: si tu ordenador es casero, solo te recomiendo conservar un directorio:

/home/dullyboy

De hecho, se recomienda que este directorio esté en una partición separada o en un disco duro propio. Así puedes reinstalar todo el sistema, o llevártelo a un nuevo ordenador, manteniendo todos tus datos y configuraciones.

^MiSaTo^
27/07/2012, 16:41
Norton Ghost? no se si se sigue usando, pero en su día (hace mmm... 8-10 años) era lo que yo usaba

Karkayu
27/07/2012, 17:08
Norton Ghost? no se si se sigue usando, pero en su día (hace mmm... 8-10 años) era lo que yo usaba

Parecido al Norton Ghost esta el Clonezilla (http://clonezilla.org/) pero creo que este tipo de programas no es lo que busca el compañero.
Si no he entendido mal, él quiere, en un PC nuevo con su windows instalado, poder pasar los programas que usa con su configuración tal y como están ahora mismo en el PC que va a 'jubilar'.
Si es eso, el Norton no el sirve :)

Dullyboy
27/07/2012, 18:59
Windows no te sé decir, así que solo puedo hablarte de Linux.

En Linux hay dos directorios principales para configuraciones:

/etc Aquí está la confiuguración de los programas "importantes" de tu ordenador. Por ejemplo, servidores de archivos, web, seguridad... Lo que se ejecuta en el ordenador sin que nadie le diga nada. Si es un ordenador casero, lo más probable es que la configuración estándar sea la más correcta así que a menos que tengas unas necesidades muy especiales con los servidores, no hace falta que lo conserves.

/home/dulllyboy Aquí está la configuración de los programas que usas tú, además de todos tus archivos personales. Dentro de este directorio hace unos años las configuraciones estaban en directorios separados con nombres que empiezan con un punto (estos directorios suelen ocultarse en gestores de archivos y no salen a menos que lo configures explícitamente). Los programas más antiguos aún lo hace así. Por ejemplo, la configuración de firefox está en el directorio:

/home/dullyboy/.mozilla

Aunque últimamemente se está centralizando la configuración en dos directorios (cuál de estos dos exactamente depende del programa)

/home/dullyboy/.local
/home/dullyboy/.config

Por ejemplo, la configuración de chrome está en

/home/dullyboy/.config/google-chrome

Mientras que la configuración de SuperMeatboy, por decir algún juego, está en:

/home/dullyboy/.local/share/SuperMeatBoy

Resumiendo: si tu ordenador es casero, solo te recomiendo conservar un directorio:

/home/dullyboy

De hecho, se recomienda que este directorio esté en una partición separada o en un disco duro propio. Así puedes reinstalar todo el sistema, o llevártelo a un nuevo ordenador, manteniendo todos tus datos y configuraciones.

Vale, lujo, entonces en linux no hace falta programar nada porque está hecho como Crom manda, algo menos de que preocuparse y un argumento más para hacer el cambio. Siendo así también también estarán las configuraciones de las extensiones de firefox ¿no? (el historial, favoritos y sesiones no me preocupa porque lo tengo sincronizado). Esto es lo más gordo, luego si hay que buscar donde guarda la configuración del escritorio tampoco es mucho problema.


Parecido al Norton Ghost esta el Clonezilla (http://clonezilla.org/) pero creo que este tipo de programas no es lo que busca el compañero.
Si no he entendido mal, él quiere, en un PC nuevo con su windows instalado, poder pasar los programas que usa con su configuración tal y como están ahora mismo en el PC que va a 'jubilar'.
Si es eso, el Norton no el sirve :)
También quería hacer esto para hacer más rápidas los formateos y reinstalaciones y ahí si me serviría hacer una imagen, pero claro ahora al ser cambio de equipo no hay tu tia :). Y si mi puedo hacer un instalador de drivers y programas (que se puedan actualizar de una vez a otra) para no tener que hacerlo yo también sería manteca .

juanvvc
27/07/2012, 19:09
Siendo así también también estarán las configuraciones de las extensiones de firefox ¿no? (el historial, favoritos y sesiones no me preocupa porque lo tengo sincronizado). Esto es lo más gordo, luego si hay que buscar donde guarda la configuración del escritorio tampoco es mucho problema.

Firefox es un poco especial. Desconozco la razón, pero el directorio de configuración es personalizado y no sé hasta qué punto se puede llevar entre ordenadores. Lo encontrarás en /home/dullyboy/.mozilla/firefox/CURRUPIPI.default

Verás que el CURRUPIPI ése es una cadena específica de tu instalación. No sé si lo puedes mover entre ordenadores. Es el único programa que conozco que hace esto.

La configuración del escritorio depende del escritorio: los programas KDE suelen preferir /home/dullyboy/.local mientras que los programas Gnome gustan más de /home/dullyboy/.config Otros escritorios pueden meterse en otros directorios: awesome se configura en /home/dullyboy/.config/awesome, WindowMaker en /home/dullyboy/GNUStep ...

Vamos, que para no liarse mejor conservar todo el $HOME y ya está.

egleuterio
27/07/2012, 19:14
Siempre puedes desinstalar todos los drivers antes de hacer la imagen y una vez vuelcas la imagen en el equipo nuevo instalas los que toquen, como cuando pasamos maquinas físicas a virtuales, que al fin de cuenta lo que haces es volcar una imagen de un equipo en dos hardwares distintos :P

Dullyboy
27/07/2012, 19:45
Firefox es un poco especial. Desconozco la razón, pero el directorio de configuración es personalizado y no sé hasta qué punto se puede llevar entre ordenadores. Lo encontrarás en /home/dullyboy/.mozilla/firefox/CURRUPIPI.default

Verás que el CURRUPIPI ése es una cadena específica de tu instalación. No sé si lo puedes mover entre ordenadores. Es el único programa que conozco que hace esto.

La configuración del escritorio depende del escritorio: los programas KDE suelen preferir /home/dullyboy/.local mientras que los programas Gnome gustan más de /home/dullyboy/.config Otros escritorios pueden meterse en otros directorios: awesome se configura en /home/dullyboy/.config/awesome, WindowMaker en /home/dullyboy/GNUStep ...

Vamos, que para no liarse mejor conservar todo el $HOME y ya está.
Mierda, entonces hace como en windows, así que tendría que seguir como hasta ahora, exportando todas las configuraciones de las extensiones que lo permitan

dardo
27/07/2012, 22:46
Firefox es un poco especial. Desconozco la razón, pero el directorio de configuración es personalizado y no sé hasta qué punto se puede llevar entre ordenadores. Lo encontrarás en /home/dullyboy/.mozilla/firefox/CURRUPIPI.default

Verás que el CURRUPIPI ése es una cadena específica de tu instalación. No sé si lo puedes mover entre ordenadores. Es el único programa que conozco que hace esto.

La configuración del escritorio depende del escritorio: los programas KDE suelen preferir /home/dullyboy/.local mientras que los programas Gnome gustan más de /home/dullyboy/.config Otros escritorios pueden meterse en otros directorios: awesome se configura en /home/dullyboy/.config/awesome, WindowMaker en /home/dullyboy/GNUStep ...

Vamos, que para no liarse mejor conservar todo el $HOME y ya está.

En el caso de Firefox no estoy serguro, pero será como en Thunderbird, lo instalas en el equipo nuevo y injertas el contenido del directorio con el nombre raro o copias el directorio personalizado entero, luego creo que había que tocar un fichero de configuración para que cogiera el nuevo directorio y ya está, correo, extensiones, configuración de las cuentas... todo.

Dullyboy
08/08/2012, 00:25
Creo que ya he decidido más o menos que quiero hacer. He bajado el python y la biblioteca wxPython para hacerme un programilla para hacer las copias de las configuraciones y que también sirva para meterlas de nuevo. Lo que tengo en mente es muy básico por supuesto que no tengo casi base alguna de programación :), primero y principalmente quiero poder definir que archivos guardar por cada programa (sería una columna para los "programas", y otra para los archivos de cada uno). A ver hasta donde puedo llegar sin preguntar :D.

eToiAqui
08/08/2012, 00:36
En el caso de Firefox no estoy serguro, pero será como en Thunderbird, lo instalas en el equipo nuevo y injertas el contenido del directorio con el nombre raro o copias el directorio personalizado entero, luego creo que había que tocar un fichero de configuración para que cogiera el nuevo directorio y ya está, correo, extensiones, configuración de las cuentas... todo.

O usas MozBackup tanto en Firefox como en Thunderbird, y guardas todo, contraseñas, xtensiones, marcadores, correos guardados, cuentas...

Dullyboy
08/08/2012, 11:49
O usas MozBackup tanto en Firefox como en Thunderbird, y guardas todo, contraseñas, xtensiones, marcadores, correos guardados, cuentas...

Tendré que probarlo, porque el FeBe no me llegó a convencer nunca.

Dullyboy
16/08/2012, 20:41
Hasta aquí llegué sin preguntar, que ya he puesto una pregunta en stackoverflow (http://stackoverflow.com/questions/11991707/how-can-i-remove-duplicated-items-from-an-objectlistview-wxpython) :D.
A base de copy/paste/edit he llegado a esto, pero me estoy atascando en varias cosas:
- Quitar las entradas repetidas en la lista (lo que he preguntado en stackoverflow).
- No soy capaz de bindear una tecla con los splitters.
- Añadir entradas en la lista desde el Filedialog.
(Las acciones de los botones, que cambie de lista en función del programa seleccionado y demás cosas que están si hacer las estoy dejando para después, aunque aún no se si sabré hacerlas :))

import os
import stat
import time
import sys

try:
import wx

except ImportError:
raise ImportError,"Se requiere el modulo wxPython"

try:
from ObjectListView import ObjectListView, ColumnDefn
except ImportError:
raise ImportError,"Se requiere el modulo ObjectListView"

wildcard = "Python source (*.py; *.pyc)|*.py;*.pyc|" \
"All files (*.*)|*.*"

#Nombres de los botones
ID_NEW = 1
ID_RENAME = 2
ID_DELETE = 3
ID_EDIT = 4
ID_SAVE = 5
ID_RESTORE = 6

# Declare GUI Constants
MENU_FILE_EXIT = wx.NewId()
DRAG_SOURCE = wx.NewId()
XX = 0



################DEBUG CODE##########################

class LogText(wx.Panel):

def __init__(self, parent, X):
wx.Panel.__init__(self, parent)
self.X = X
# Add a panel so it looks the correct on all platforms
self.log = wx.TextCtrl(self, wx.ID_ANY, size=(300,100),
style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
self.btn = wx.Button(self, wx.ID_ANY, 'Push me!')
self.btn.Bind(wx.EVT_BUTTON, self.onButton, self.btn)

# Add widgets to a sizer
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.log, 1, wx.ALL|wx.EXPAND, 5)
sizer.Add(self.btn, 0, wx.ALL|wx.CENTER, 5)
self.SetSizer(sizer)

# redirect text here
sys.stdout=RedirectText(self.log)

def onButton(self, event):
print self.X


class RedirectText(object):
def __init__(self,aWxTextCtrl):
self.out=aWxTextCtrl

def write(self,string):
self.out.WriteText(string)

################DEBUG CODE##########################

################################################## ######################
class MyFileDropTarget(wx.FileDropTarget):
""""""

#----------------------------------------------------------------------
def __init__(self, window):
"""Constructor"""
wx.FileDropTarget.__init__(self)
self.window = window

#----------------------------------------------------------------------
def OnDropFiles(self, x, y, filenames):
"""
When files are dropped, update the display
"""
self.entriesList = list() # Actual dropped file entries; duplicates are avoided.
self.haveEntries = False # Tracks actual dropped file entries, but not help entries.
self.window.updateDisplay(filenames)



################################################## ######################
class FileInfo(object):
""""""

#----------------------------------------------------------------------
def __init__(self, path, date_created, date_modified, size):
"""Constructor"""
self.name = os.path.basename(path)
self.path = path
self.date_created = date_created
self.date_modified = date_modified
self.size = size


#Panel de los archivos y directorios.
################################################## ######################
class FileList(wx.Panel):
""""""

#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
self.file_list = []


# For row deletions.
self.Bind(wx.EVT_LEFT_DOWN, self.OnFindCurrentRow)
self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)

self.currRow = None
self.numCols = -1



self.olv = ObjectListView(self, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
self.olv.SetEmptyListMsg("No hay carpetas y/o archivos seleccionados")
self.olv.SetEmptyListMsgFont(wx.FFont(24, wx.DEFAULT, face="Tekton"))

self.olv.SetDropTarget(MyFileDropTarget(self))
self.setFiles()
self.RemoveDuplicated(self.olv)

# Create buttons

self.vbox = wx.BoxSizer(wx.VERTICAL)
self.hbox = wx.BoxSizer(wx.HORIZONTAL)

self.btnPanel = wx.Panel(self, -1)

self.anyd = wx.Button(self.btnPanel , label='Añadir', size=(90, 30))
self.anyd.Bind(wx.EVT_BUTTON, self.onOpenFile)
self.dlt = wx.Button(self.btnPanel , label='Eliminar', size=(90, 30))
self.dlt.Bind(wx.EVT_BUTTON, self.onOpenFile)
self.sv = wx.Button(self.btnPanel, label='Guardar', size=(90, 30))
self.sv.Bind(wx.EVT_BUTTON, self.onOpenFile)
self.bt = wx.Button(self.btnPanel, label='Borrar todo', size=(90, 30))
self.sv.Bind(wx.EVT_BUTTON, self.onOpenFile)


self.hbox.Add(self.anyd, 0, wx.CENTER, 5)
self.hbox.Add(self.dlt, 0, wx.CENTER, 5)
self.hbox.Add(self.sv, 0, wx.CENTER, 5)
self.hbox.Add(self.bt, 0, wx.CENTER, 5)

self.vbox.Add(self.olv, 1, wx.ALL | wx.EXPAND, 5)

self.btnPanel.SetSizer(self.hbox)
self.vbox.Add(self.btnPanel, 0.6, wx.CENTER | wx.CENTER, 10)
self.vbox.Add((-1,5.))
self.SetSizer(self.vbox)

def RemoveDuplicated(self, X):
for all in X:
Counter = -1
for B in X:
if X.path(A) == X.path(B):
Counter = Counter + 1
if Counter >= 1:
RemoveObject(A)

def onOpenFile(self, event):
"""
Create and show the Open FileDialog
"""
dlg = wx.FileDialog(
self, message="Elige los archivos o carpetas que quieras añadir",
defaultFile="",
wildcard=wildcard,
style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR
)
if dlg.ShowModal() == wx.ID_OK:
self.olv.AddObject(dlg.GetPaths())
dlg.Destroy()


def OnFindCurrentRow( self, event ) :
""" Triggered on every wx.EVT_LEFT_DOWN.

Is also called by OnRightDown{}.
"""

# Deselect any previously selected row.
if (self.currRow is not None) :
self.Select( self.currRow, False )

# Select the currently clicked row.
row, _ignoredFlags = self.HitTest( event.GetPosition() )
self.currRow = row # Save row index for later use.
self.Select( row )

#end def

#---------------------------------- FilesDirsListCtrl

def OnRightDown( self, event) :
pos = event.GetPosition()
mess = "Mouse is at " + str(pos)
Principal.SetTitle(mess)
event.Skip()

menu = wx.Menu()
menuItem_delete = menu.Append( -1, 'Delete this entry')

self.Bind( wx.EVT_MENU, self.OnDeleteRow, menuItem_delete )

# Select row
self.OnFindCurrentRow( event )

self.PopupMenu( menu, event.GetPosition() )

#end def

#---------------------------------- FilesDirsListCtrl

def OnDeleteRow( self, event ) :

if (self.currRow >= 0) :

# This row data must have been appended to self.entriesList.

#----- SANITY CHECK

# self.GetItemCount() may be greater than self.numEntries due to help messages.
assert( self.numEntries == len( self.entriesList ) )

#-----

# Retreive the selected raw-row-data as a list of lists.
allSelectedRowData = self.GetAllSelectedRowData()

if (len( allSelectedRowData ) >= 1) :

#-----

rawRowData = allSelectedRowData[ 0 ] # There can be only a single row selected.
lineIdx = rawRowData[ 0 ]
unknownData = rawRowData[ 1 ]
textDataTuple = tuple( rawRowData[ 2: ] ) # Make same type as in self.entriesList

if self.numEntries :

try :
entryListIndex = None
entryListIndex = self.entriesList.index( textDataTuple )
except ValueError :
print '#### ERROR: textDataTuple NOT FOUND in self.entriesList :'
print ' ', textDataTuple
print

return
#-----

#end try

# Delete this row item from [ self.entriesList ].
del self.entriesList[ entryListIndex ]

# Update the status vars.
self.numEntries -= 1
if (self.numEntries < 1) :

self.haveEntries = False
self.Append( self.HelpTextTuple )

# Finally, detete the textList row item.
self.DeleteItem( self.currRow )

#end if self.numEntries

#end if (len( allSelectedRowData ) > 0)

#end if (self.currRow >= 0)

#end OnDeleteRow def

#----------------------------------------------------------------------
def updateDisplay(self, file_list):
""""""
for path in file_list:
file_stats = os.stat(path)
creation_time = time.strftime("%m/%d/%Y %I:%M %p",
time.localtime(file_stats[stat.ST_CTIME]))
modified_time = time.strftime("%m/%d/%Y %I:%M %p",
time.localtime(file_stats[stat.ST_MTIME]))
file_size = file_stats[stat.ST_SIZE]
if file_size > 1024:
file_size = file_size / 1024.0
file_size = "%.2f KB" % file_size

self.file_list.append(FileInfo(path,
creation_time,
modified_time,
file_size))

self.olv.SetObjects(self.file_list)

#----------------------------------------------------------------------
def setFiles(self):
""""""
self.olv.SetColumns([
ColumnDefn("Nombre", "left", 220, "name", minimumWidth = 30),
ColumnDefn("Ruta", "left", 220, "path", minimumWidth = 30),
ColumnDefn("Fecha de creación", "left", 150, "date_created", minimumWidth = 30),
ColumnDefn("Fecha de modificación", "left", 150, "date_modified", minimumWidth = 30),
ColumnDefn("Tamaño", "left", 100, "size", minimumWidth = 30)
])
self.olv.SetObjects(self.file_list)


#Lista de aplicaciones y botones.

class ListBox(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)

self.hbox = wx.BoxSizer(wx.HORIZONTAL)
self.vbox = wx.BoxSizer(wx.VERTICAL)

self.listbox = wx.ListBox(self, -1)
self.hbox.Add(self.listbox, 1, wx.EXPAND | wx.ALL, 20)

self.btnPanel = wx.Panel(self, -1)
self.new = wx.Button(self.btnPanel, ID_NEW, 'Nuevo', size=(90, 30))
self.ren = wx.Button(self.btnPanel, ID_RENAME, 'Renombrar', size=(90, 30))
self.dlt = wx.Button(self.btnPanel, ID_DELETE, 'Eliminar', size=(90, 30))
self.edt = wx.Button(self.btnPanel, ID_EDIT, 'Editar', size=(90, 30))
self.sv = wx.Button(self.btnPanel, ID_SAVE, 'Guardar', size=(90, 30))
self.rst = wx.Button(self.btnPanel, ID_RESTORE, 'Restaurar', size=(90, 30))





self.vbox.Add((-1, 20))
self.vbox.Add(self.new)
self.vbox.Add(self.ren, 0, wx.TOP, 5)
self.vbox.Add(self.dlt, 0, wx.TOP, 5)
self.vbox.Add(self.edt, 0, wx.TOP, 5)
self.vbox.Add(self.sv, 0, wx.TOP, 5)
self.vbox.Add(self.rst, 0, wx.TOP, 5)

self.Bind(wx.EVT_BUTTON, self.NewItem, id=ID_NEW)
self.Bind(wx.EVT_BUTTON, self.OnRename, id=ID_RENAME)
self.Bind(wx.EVT_BUTTON, self.OnDelete, id=ID_DELETE)
self.Bind(wx.EVT_BUTTON, self.OnClear, id=ID_EDIT)
self.Bind(wx.EVT_LISTBOX_DCLICK, self.OnRename)
self.Bind(wx.EVT_BUTTON, self.OnSave, id=ID_SAVE)
self.Bind(wx.EVT_BUTTON, self.OnRestore, id=ID_RESTORE)

self.btnPanel.SetSizer(self.vbox)
self.hbox.Add(self.btnPanel, 0.6, wx.EXPAND | wx.RIGHT, 20)
self.SetSizer(self.hbox)



def NewItem(self, event):
text = wx.GetTextFromUser('Nombre', 'Programa a salvar')
if text != '':
self.listbox.Append(text)

def OnRename(self, event):
sel = self.listbox.GetSelection()
text = self.listbox.GetString(sel)
renamed = wx.GetTextFromUser('Nuevo nombre', 'Rename dialog', text)
if renamed != '':
self.listbox.Delete(sel)
self.listbox.Insert(renamed, sel)


def OnDelete(self, event):
sel = self.listbox.GetSelection()
if sel != -1:
self.listbox.Delete(sel)

def OnClear(self, event):
self.listbox.Clear()

def OnSave(self, event):
sel = self.listbox.GetSelection()
if sel != -1:
self.listbox.Delete(sel)

def OnRestore(self, event):
sel = self.listbox.GetSelection()
if sel != -1:
self.listbox.Delete(sel)

#
#
# Frame principal

class Principal(wx.Frame):
def __init__(self,parent,id,title, *args, **kw):
wx.Frame.__init__(self,parent,id,title, size = (800,800))

self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)

splitter1 = wx.SplitterWindow(self, -1, style=wx.SP_3D)
splitter2 = wx.SplitterWindow(splitter1, -1, style=wx.SP_3D)

self.lc1 = ListBox(splitter2)
self.lc2 = FileList(splitter1)
self.log = LogText(splitter2, XX)


dt = MyFileDropTarget(self.lc2)
self.lc2.SetDropTarget(dt)
self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.OnSelect, id=self.lc1.GetId())



splitter1.SplitHorizontally(splitter2,self.lc2)
splitter2.SplitVertically(self.lc1, self.log)

splitter1.SetMinimumPaneSize(250)
splitter2.SetMinimumPaneSize(250)


sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(splitter1, 1, wx.EXPAND)
self.SetSizer(sizer)

splitter1.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
splitter2.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self.Centre()
self.Show(True)

def onButton(self, event):
print "You pressed the button!"

def OnKeyDown(self, e):

key = e.GetKeyCode()

if key == wx.WXK_F1:

ret = wx.MessageBox('Are you sure to quit?', 'Question',
wx.YES_NO | wx.NO_DEFAULT, self)

if ret == wx.YES:
self.Close()

def OnSelect(self, event):
list = os.listdir(self.dir.GetPath())
self.lc1.ClearAll()
#self.lc2.ClearAll()
for i in range(len(list)):
if list[i][0] != '.':
self.lc1.InsertStringItem(0, list[i])

if __name__ == "__main__":
app = wx.App()
frame = Principal(None,-1,'Mi aplicacion')
app.MainLoop()

Dullyboy
30/08/2012, 19:35
Bueno, ya he conseguido hacer algo que funciona gracias a swapd0, a stackoverflow y sobre todo al blog http://www.blog.pythonlibrary.org/ que es de donde más he copia/pegado/editado :).
Lo subo para dar constancia básicamente, que tampoco creo que haya mucha gente que lo quiera :P.

28213
28215
28216
28217