8 oct. 2009

Desarrollo de aplicaciones gráficas con python+gtk+glade. Parte 6. Editor de Texto

En el tutorial anterior se mostró como abrir un archivo, mostrar el contenido en el widget textview, ahora se agrega la posibilidad de editar y guardar el archivo.

En la figura se muestra el diseño en glade.

A continuación el código del programa:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Importación de módulos
import pygtk
pygtk.require('2.0')
import gtk, gtk.glade, inspect, sys
import string
#Creación de la clase ej1

class Editor:
#Creación del método constructor de la clase.
def __init__(self):
#Se captura el archivo xml de la interfaz
self.w_tree = gtk.glade.XML('ej1.glade')
#Se asocia la ventana1
self.ventana1 = self.w_tree.get_widget('ventana1')
#Se asocia el widget textview1
self.textview1 = self.w_tree.get_widget('editortexto')
#Se asocia el widget de la selección de archivo
self.seleccionararchivo = self.w_tree.get_widget('filechooserbutton1')
#Se asocia el widget de la selección de archivo
self.seleccionararchivo2 = self.w_tree.get_widget('filechooserbutton2')
#Se asocia el boton salir
self.botonsalir = self.w_tree.get_widget('bsalir')
#Se asocia los eventos con las señales
self.w_tree.signal_autoconnect(dict(inspect.getmembers(self)))
#Se asocia el objeto buffer de texto
self.buffertexto = gtk.TextBuffer()
#Se crea una lista vacía
self.lista = []
#Se crea la variable que contendrá el nombre del archivo seleccionado
self.archivo_name = ""
#Se asigna un título a la ventana
self.ventana1.set_title("Editor de texto")


#Se crea el método de selección de archivo
def on_filechooserbutton1_file_set(self,*args):
#Se captura el nombre del archivo en la variable
self.archivo_name = self.seleccionararchivo.get_filename()
#Se abre el archivo colocando su contenido en una lista
self.lista = open(self.archivo_name,"r").readlines()
#Se recorre la lista y se coloca el contenido en el buffer de texto
for i in range(len(self.lista)):
self.buffertexto.insert_at_cursor(self.lista[i])
#Se coloca el contenido del buffer en el textview
self.textview1.set_buffer(self.buffertexto)
#Se oculta la ventana de selección de archivo
self.seleccionararchivo.hide()
#Se crea el método para el boton salir


def on_filechooserbutton2_file_set(self,*args):
#Se captura el nombre del archivo en la variable
self.archivo_name2 = self.seleccionararchivo2.get_filename()
#Se captura el inicio y fin del buffer del textview
startiter, enditer = self.buffertexto.get_bounds()
#Se abre el archivo en modo escritura
archivo = open(self.archivo_name2,"w")
#Se escribe la información en el objeto archivo , tomando el texto del buffer
archivo.writelines(self.buffertexto.get_text(startiter,enditer))
#Se cierra el archivo
archivo.close()

#Salir
def on_bsalir_clicked(self,*args):
gtk.main_quit()




#Se crea el método para cerrar la aplicación
def on_ventana1_destroy(self,*args):
gtk.main_quit()
#Se crea el método main que muestra la ventana
def main(self,*args):
self.ventana1.show()
gtk.main()


if __name__ == "__main__":
app = Editor()
app.main()
La siguiente figura muestra la aplicación ejecutandose:



En la siguiente figura se muestra el contenido del archivo en el editor con posibiliad de editar:

7 oct. 2009

Agregar acceso a teclas rápidas con python

De la publicación anterior sobre uso de gconf con python, ahora se mostrará un script que agrega varios accesos rápido al gnome.

#Importar módulo gconf
import gconf

#Creando la clase Conf
class Conf:
def __init__(self):
#Se asocia al cliente de gconf
self.gconfClient = gconf.client_get_default()
#variable aplicaciones que contiene las aplicaciones a asociar
self.aplicaciones = ("orca", "gnome-terminal","oowriter","iceweasel","nautilus","ooimpress","pidgin","oocalc","gedit","gnome-calculator","rhythmbox")
#Asignación de las rutas de configuración del gconf
self.comando = "/apps/metacity/keybinding_commands/command_"
self.asignacion_teclado = "/apps/metacity/global_keybindings/run_command_"
#Asociación de las teclas rápidas con las aplicaciones
self.teclas = {"orca":"o","gnome-terminal":"t","oowriter":"w","iceweasel":"n","nautilus":"h","ooimpress":"i","pidgin":"p","oocalc":"x","gedit":"e","gnome-calculator":"c","rhythmbox":"m"}

#Modificación de la configuración de gconf
def modificar(self):
cont = 1
for aplicacion in self.aplicaciones:
ruta1 = "%s%s" %(self.comando,cont)
ruta2 = "%s%s" %(self.asignacion_teclado,cont)
self.gconfClient.set_string(ruta1, "%s" %aplicacion)
self.gconfClient.set_string(ruta2, "%s" %self.teclas[aplicacion])
cont = cont +1
#Listar las configuraciones de gconf relacionadas con las aplicaciones a ejecutar con los accesos rápidos
def listar(self):
cont = 1
for aplicacion in self.aplicaciones:
ruta1 = "%s%s" %(self.comando,cont)
ruta2 = "%s%s" %(self.asignacion_teclado,cont)
print self.gconfClient.get_string(ruta1),self.gconfClient.get_string(ruta2)
cont = cont +1


if __name__ == "__main__":
def mensaje():
#Mensaje de ayuda del comando
print "pyconfig-orca options "
print "option : --help : Print this help"
print "option : --list : List gconf for gnome-orca"
print "option : --change : Change gconf for gnome-orca"
#Importar módulo sys y instanciar la clase Conf
import sys
config = Conf()
#Si hay un argumento solamente (nombre del programa), muestra la ayuda
if len(sys.argv) == 1 :
mensaje()
#Si hay 2 argumentos (nombre del comando y acción)
elif len(sys.argv) == 2:
#Si argumento es --list se lista la configuración, sí es --change se cambia la configuración del gconf
if sys.argv[1] == "--list" :
config.listar()
elif sys.argv[1] == "--change":
config.modificar()
elif sys.argv[1] == "--help" :
mensaje()
else:
mensaje()
else:
mensaje()


El código fuente lo pueden bajar de google code de este enlace