Filechooser
Rafael Cantos
rafaelcantos en hotmail.com
Jue Ago 23 18:20:29 CEST 2007
Hola. Aquí te pongo el código relacionado con esta parte, verás que hay
cosas experimentales. Está dividido en 3 archivos distintos como indico.
Cuando realizo la llamada a filechooser, ¿donde se recoge el path devuelto?
# Archivo principal.py
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import pygtk
pygtk.require('2.0')
import gtk
import vista
def main():
gtk.main()
return 0
if __name__ == "__main__":
vista.Vista()
main()
# Archivo vista.py
#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
import pygtk
pygtk.require('2.0')
import gtk
import controlador
# Creamos la clase Vista para el interfaz.
class Vista:
def ventanaNueva(self):
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
# window.connect("delete_event", window.delete_event)
# window.connect("destroy", self.destroy)
window.set_title("DBR")
window.set_border_width(10)
return window
# Creacion de la barra de menu.
def menuPrincipal(self, ventana):
accel_group = gtk.AccelGroup()
# Inicializacion de la factoria de elementos.
# Parametro 1: Tipo de menu.
# Parametro 2: Ruta del menu.
# Parametro 3: Una referencia a AccelGroup.
item_factory = gtk.ItemFactory(gtk.MenuBar, "<main>", accel_group)
# Generacion de los elementos de menu.
item_factory.create_items(self.menu_items)
# Se incluye el grupo de AccelGroup a la ventana.
ventana.add_accel_group(accel_group)
# Se necesita una referencia a item_factory para prevenir su
destruccion
self.item_factory = item_factory
# Se devuelve la barra de menu creada.
return item_factory.get_widget("<main>")
# Inicializacion de la clase Vista.
def __init__(self):
c = controlador.Controlador()
self.menu_items = (
( "/_Archivo", "<alt>A", None, 0, "<Branch>"),
("/Archivo/_ABRIR libro", "<control>A", c.cargaFichero, 0, None),
("/Archivo/_Salir", "<control>S", gtk.main_quit, 0, None),
)
ventana = self.ventanaNueva()
caja_principal = gtk.VBox(False, 1)
caja_principal.set_border_width(1)
# ventana.add(caja_principal)
caja_principal.show()
barraMenu = self.menuPrincipal(ventana)
caja_principal.pack_start(barraMenu, False, True, 0)
barraMenu.show()
ventana.show()
# Archivo controlador.py
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import pygtk
pygtk.require('2.0')
import gtk
import os
# Comprobacion la version de pygtk
if gtk.pygtk_version < (2,3,90):
print "PyGtk 2.3.90 or later required for this example"
raise SystemExit
class Controlador:
def destroy(self, widget):
return True
# Metodo para la carga de un archivo
def cargaFichero(self, w, data):
# Creacion de un nuevo control de seleccion de fichero
seleccion = gtk.FileChooserDialog("Open..", None,
gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK))
seleccion.set_default_response(gtk.RESPONSE_OK)
filtro = gtk.FileFilter()
# Nombre por defecto del fichero
path = os.path.abspath("ncc")
seleccion.set_filename(path)
# Extension permitida para el fichero
filtro.add_pattern("*.html")
seleccion.add_filter(filtro)
response = seleccion.run()
if response == gtk.RESPONSE_OK:
print seleccion.get_filename(), 'selected'
elif response == gtk.RESPONSE_CANCEL:
print 'Closed, no files selected'
seleccion.destroy()
return 0
Buenas,
>
> > Tengo un menú, con un elemento de menú para abrir un fichero (aquí es
> > donde se llama a filechooser). Ahora, esta opción llama al método de
> > filechooser y selecciono el fichero. Ahora, este fichero, o su path, es
> > lo que quiero devolver. Pero lo que no sé si en el menú se recibe el
> > path (he usado itemfactory) pues lo he intentado pero me da error o si
> > no es así.
> >
> > Espero haberme explicado bien ahora.
>
>Seguramente antes te explicaste, pero sigo sin entenderlo; no veo la
>relación entre usar itemfactory y el problema para recibir el path del
>filechooser. Lo mejor sería que mandaras algo de código, corto pero
>funcional, para hacernos una idea.
_________________________________________________________________
Descarga gratis la Barra de Herramientas de MSN
http://www.msn.es/usuario/busqueda/barra?XAPID=2031&DI=1055&SU=http%3A//www.hotmail.com&HL=LINKTAG1OPENINGTEXT_MSNBH
Más información sobre la lista de distribución Python-es