# para poder usar este editor podes bajarte todos los módulos
# de: http://code.google.com/p/machitext/source/browse/#svn/trunk
#!/usr/bin/env python
# -*- coding: utf8 -*-
import wx
import os
class Splash():
def __init__(self):
image = wx.Image('./imagenes/splash.bmp', wx.BITMAP_TYPE_BMP)
bmp = image.ConvertToBitmap()
wx.SplashScreen(bmp, wx.SPLASH_CENTRE_ON_SCREEN |
wx.SPLASH_TIMEOUT, 5000, None, -1)
wx.Yield()
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame.__init__
kwds['style'] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.texto = wx.TextCtrl(self, -1, '', style=wx.TE_MULTILINE)
self.a = self.texto.GetValue()
self.__set_properties()
self.__do_layout()
# end wxGlade
def __set_properties(self):
# begin wxGlade: MyFrame.__set_properties
self.SetTitle('MachiText')
self.CenterOnScreen()
# end wxGlade
def __do_layout(self):
# begin wxGlade: MyFrame.__do_layout
grid_sizer_1 = wx.FlexGridSizer(1, 1, 0, 0)
grid_sizer_1.Add(self.texto, 0, wx.EXPAND, 0)
self.SetSizer(grid_sizer_1)
grid_sizer_1.AddGrowableRow(0)
grid_sizer_1.AddGrowableCol(0)
self.Layout()
# Esta parte de aca abajo es la ToolBar()
# Esta parte fue hecha por pablo carrai, compañero del curso de programación
# del centro de formación profesional San Cayetano de Carapachay (gracias Pablo).
# El tsize fija el tamaño de las imagenes de abajo me evita tener que poner por cada imagen el tamaño
tsize = (25,25)
# estas variables son imagenes que luego aparecen en la barra ToolBar() esta es de nuevo
new_bmp = wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_TOOLBAR, tsize)
# La de abajo es de abrir
open_bmp = wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, tsize)
# Copiar
copy_bmp = wx.ArtProvider.GetBitmap(wx.ART_COPY, wx.ART_TOOLBAR, tsize)
# Pegar
paste_bmp = wx.ArtProvider.GetBitmap(wx.ART_PASTE, wx.ART_TOOLBAR, tsize)
# Guardar
guardar_bmp = wx.ArtProvider.GetBitmap(wx.ART_FILE_SAVE, wx.ART_TOOLBAR,tsize)
# Guardar como...
guardarc_bmp = wx.ArtProvider.GetBitmap(wx.ART_FILE_SAVE_AS, wx.ART_TOOLBAR,tsize)
# Cortar
cortar_bmp = wx.ArtProvider.GetBitmap(wx.ART_CUT, wx.ART_TOOLBAR,tsize)
# Salir
salir_bmp = wx.ArtProvider.GetBitmap(wx.ART_QUIT, wx.ART_TOOLBAR,tsize)
# Aca hacemos algo parecido a lo que sucede con el menu, hay que adosarlo al Frame principal
toolbar = self.CreateToolBar()
# Una ves adosado al Frame comenzamos a agregar los elementos del ToolBar()
# Elemento Nuevo
toolbar.AddLabelTool(wx.ID_NEW, 'Nuevo',new_bmp, shortHelp = 'Nuevo', longHelp = 'Crea un nuevo documento')
# Atamos el boton nuevo del ToolBar() a un evento de ToolBar() wx.EVT_TOOL, lo unimos a la funcion nuevo y usamos un id=wx.ID_NEW que es el identificador del widget, esto reenplaza al usado -1 es mejor por que cada widget tiene que tener un solo identificador.
self.Bind(wx.EVT_TOOL, self.OnNuevo, id = wx.ID_NEW)
# Segundo Abrir
toolbar.AddLabelTool(wx.ID_OPEN, 'Abrir',open_bmp, shortHelp = 'Abrir', longHelp = 'Abre un archivo')
# Hacemos lo mismo con los otros botones del ToolBar() pueden ver que los id tambien fueron usados en los menues comunes. Asi que sirven para mucho.
self.Bind(wx.EVT_TOOL, self.OnAbrir, id = wx.ID_OPEN)
# Tercero es un separador
toolbar.AddSeparator()
toolbar.AddLabelTool(wx.ID_SAVE, 'Guardar', guardar_bmp, shortHelp = 'Guardar', longHelp = 'Guarda un documento')
self.Bind(wx.EVT_TOOL, self.OnGuardar, id = wx.ID_SAVE)
toolbar.AddLabelTool(wx.ID_SAVEAS, 'Guardar como..', guardarc_bmp, shortHelp = 'Guardar Como..', longHelp = 'Guarda como..')
self.Bind(wx.EVT_TOOL, self.OnGuardar_como, id = wx.ID_SAVEAS)
toolbar.AddSeparator()
toolbar.AddLabelTool(wx.ID_CUT, 'Cortar', cortar_bmp, shortHelp = 'Cortar', longHelp = 'Corta un elemento')
self.Bind(wx.EVT_TOOL, self.OnCortar, id = wx.ID_CUT)
# Cuarto Copiar
toolbar.AddLabelTool(wx.ID_COPY, 'Copiar', copy_bmp, shortHelp = 'Copiar', longHelp = 'Copia un elemento')
self.Bind(wx.EVT_TOOL, self.OnCopiar, id = wx.ID_COPY)
# Pegar
toolbar.AddLabelTool(wx.ID_PASTE, 'Pegar', paste_bmp, shortHelp = 'Pegar', longHelp = 'Pega un elemento')
self.Bind(wx.EVT_TOOL, self.OnPegar, id = wx.ID_PASTE)
toolbar.AddSeparator()
toolbar.AddLabelTool(wx.ID_EXIT, 'Salir', salir_bmp, shortHelp = 'Salir', longHelp = 'Sale de la aplicacion')
self.Bind(wx.EVT_TOOL, self.OnSalir, id = wx.ID_EXIT)
toolbar.Realize()
# Aca agregamos las imagenes a los botones de la ToolBar()
toolbar.SetToolBitmapSize(tsize)
menu = wx.MenuBar()
menuArchivo = wx.Menu()
menu.Append(menuArchivo, u'&Archivo')
self.nuevo = menuArchivo.Append(wx.ID_NEW, u'Nuevo\tCtrl+N', u'Nuevo')
self.abrir = menuArchivo.Append(wx.ID_OPEN, u'Abrir\tCtrl+O', u'Abrir un documento nuevo')
menuArchivo.AppendSeparator()
self.guardar = menuArchivo.Append(wx.ID_SAVE, u'&Guardar\tCtrl+S', u'Guardar un documento nuevo')
self.guardar_como = menuArchivo.Append(wx.ID_SAVEAS, u'&Guardar como...\tCtrl+H', u'Guardar un documento como.....')
menuArchivo.AppendSeparator()
self.salir = menuArchivo.Append(wx.ID_EXIT,u'Salir\tCtrl+Q', u'Salir')
menuEdicion = wx.Menu()
menu.Append(menuEdicion, u'&Edición')
self.copiar = menuEdicion.Append(wx.ID_COPY, u'Copiar\tCtrl+C', u'Copiar')
self.cortar = menuEdicion.Append(wx.ID_CUT, u'Cortar\tCtrl+X', u'Cortar')
self.pegar = menuEdicion.Append(wx.ID_PASTE, u'Pegar\tCtrl+V', u'Pegar')
menuEdicion.AppendSeparator()
self.seleccionar_todo = menuEdicion.Append(wx.ID_SELECTALL, u'Seleccionar todo\tCtrl+A', u'Seleccionar todo')
menuHerramientas = wx.Menu()
menu.Append(menuHerramientas, u'&Herramientas')
menuAyuda = wx.Menu()
menu.Append(menuAyuda, u'A&yuda')
self.atajos_teclado = menuAyuda.Append(-1, u'Atajos de teclado', u'Atajos de teclado')
menuAyuda.AppendSeparator()
self.acerca_de = menuAyuda.Append(wx.ID_ABOUT, u'Acerca de', u'Acerca de.....')
self.SetMenuBar(menu)
self.CreateStatusBar()
self.SetStatusText(u'MachiText')
##### ESTOS SON LOS BOTONES PARA CADA FUNCIÓN #####
self.Bind(wx.EVT_MENU, self.OnNuevo, self.nuevo)
self.Bind(wx.EVT_MENU, self.OnAbrir, self.abrir)
self.Bind(wx.EVT_MENU, self.OnGuardar, self.guardar)
self.Bind(wx.EVT_MENU, self.OnGuardar_como, self.guardar_como)
self.Bind(wx.EVT_MENU, self.OnSalir, self.salir)
self.Bind(wx.EVT_MENU, self.OnCopiar, self.copiar)
self.Bind(wx.EVT_MENU, self.OnCortar, self.cortar)
self.Bind(wx.EVT_MENU, self.OnPegar, self.pegar)
self.Bind(wx.EVT_MENU, self.OnSeleccionar_todo, self.seleccionar_todo)
self.Bind(wx.EVT_MENU, self.OnAcerca_de, self.acerca_de)
self.Bind(wx.EVT_MENU, self.OnAtajos_de_teclado, self.atajos_teclado)
self.Bind(wx.EVT_CLOSE, self.OnCerrar_frame)
self.Show()
return True
def OnCerrar_frame(self, evt):
self.b = self.texto.GetValue()
if self.a == self.b:
self.Destroy()
elif self.a != self.b:
self.OnSalir(self)
def OnNuevo(self, evt):
dlg = wx.MessageDialog(self, '¿¿¿ Desea guardar el documento ???', 'MACHI TEXT EDITOR', wx.NO |wx.YES | wx.ICON_QUESTION)
elegir_boton = dlg.ShowModal()
if elegir_boton == wx.ID_NO:
self.texto.Clear()
#self.OnNuevo_2(self)
elif elegir_boton == wx.ID_YES:
self.OnVentana_nueva_destroy(self)
def OnVentana_nueva_destroy(self, evt):
self.OnGuardar(self)
self.Destroy()
self.Show()
def OnNuevo_2(self, evt):
self.Destroy()
self.Show()
def OnAbrir(self, evt):
self.dirname = u''
self.filename = u''
dlg = wx.FileDialog(self, u'Abrir archivo', self.dirname, '', '*.*', wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
self.filename = dlg.GetFilename()
self.dirname = dlg.GetDirectory()
f = open(self.dirname+'/'+self.filename,'r')
self.texto.SetValue(f.read())
f.close()
dlg.Destroy()
def OnGuardar(self, evt):
self.texto.WriteText(u'')
dlg = wx.FileDialog(self, message = u'Guardar', defaultDir = os.getcwd(), defaultFile = u'', style = wx.SAVE)
dlg.SetFilterIndex(2)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
guardar = self.texto.GetValue()
f = open(path,'a')
f.write(guardar)
f.close()
dlg.Destroy()
def OnGuardar_como(self, evt):
wildcard = u'Python source (*.py)|*.py|' \
u'Compiled Python (*.pyc)|*.pyc|' \
u'SPAM files (*.spam)|*.spam|' \
u'Egg file (*.egg)|*.egg|' \
u'Text (*.txt)|*.txt|' \
u'All files (*.*)|*.*' \
self.texto.WriteText(u'')
dlg = wx.FileDialog(self, message = u'Guardar como', defaultDir = os.getcwd(), defaultFile = u'', wildcard = wildcard, style = wx.SAVE)
dlg.SetFilterIndex(2)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
guardar_como = self.texto.GetValue()
f = open(path,'a')
f.write(guardar_como)
f.close()
dlg.Destroy()
def OnSalir(self, evt):
dlg = wx.MessageDialog(self, 'Desea guardar antes de salir?', 'MACHI TEXT EDITOR', wx.NO | wx.CANCEL |wx.YES | wx.ICON_QUESTION)
elegir_boton = dlg.ShowModal()
if elegir_boton == wx.ID_NO:
self.OnSalir_2(self)
elif elegir_boton == wx.ID_CANCEL:
pass
elif elegir_boton == wx.ID_YES:
self.OnSalir_3(self)
def OnSalir_2(self, evt):
self.Destroy()
def OnSalir_3(self, evt):
self.OnGuardar(self)
self.Destroy()
def OnCopiar(self, evt):
self.texto.Copy()
def OnCortar(self, evt):
self.texto.Cut()
def OnPegar(self, evt):
self.texto.Paste()
def OnSeleccionar_todo(self, evt):
self.texto.SelectAll()
def OnAcerca_de(self, evt):
try:
self.close()
except:
import about
acerca_de = about.About(self)
def OnAtajos_de_teclado(self, evt):
try:
self.close()
except:
import atajosdeteclado
atajos = atajosdeteclado.Atajos_de_teclado(self)
def OnDestroy_atajos(self, evt):
self.ventana_atajos.Destroy()
if __name__ == '__main__':
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_1 = MyFrame(None, -1, '', size = (800, 600))
app.SetTopWindow(frame_1)
splash = Splash()
frame_1.Show()
app.MainLoop()
Deja un comentario