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