N. Volbers wrote:

You can use notebook.remove(widget) to remove the proper notebook tab.
Of course, then the callback needs to know, which widget it should
remove. I suggest passing the frame to the create_custom_tab method:

    eventBox = self.create_custom_tab("Tab %d" % page_number, notebook,
frame)

Then, in create_custom_tab, you add the frame to the connect method:

    tabButton.connect('clicked',self.remove_book , notebook, frame)

And finally, in the remove_book method, you know exactly which tab to
remove:

    notebook.remove_page(frame)



Hi!

It works well!

Thank you very much!

Bests

Sylvain Saleur

Here the updated code for the next who want to know:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

#  notebook.py

import pygtk
pygtk.require('2.0')
import gtk

class NotebookExample:
   def add_icon_to_button(self,button):
   "Fonction pour ajouter un bouton fermer"
   #création d'une boite horizontale
       iconBox = gtk.HBox(False, 0)
   #Création d'une image vide
       image = gtk.Image()
   #On récupère l'icone du bouton "fermer"
       image.set_from_stock(gtk.STOCK_CLOSE,gtk.ICON_SIZE_MENU)
   #On enlève le relief au bouton (donné en attribut)
       gtk.Button.set_relief(button,gtk.RELIEF_NONE)
   #On récupère les propriétés du bouton
       settings = gtk.Widget.get_settings(button)
   #On affecte à w et h les dimensions
       (w,h) = gtk.icon_size_lookup_for_settings(settings,gtk.ICON_SIZE_MENU)
   #On modifie ces dimensions
       gtk.Widget.set_size_request(button, w + 4, h + 4)
       image.show()
   #On met l'image dans la boite
       iconBox.pack_start(image, True, False, 0)
   #On ajoute la boite dans le bouton
       button.add(iconBox)
       iconBox.show()
       return

   def create_custom_tab(self,text, notebook, frame):
       "Crée une tab customisée avec un label et un bouton fermer"
   #On crée une eventbox
       eventBox = gtk.EventBox()
   #On crée une boite horizontale
       tabBox = gtk.HBox(False, 2)
   #On crée un label "text" (text donné en attribut)
       tabLabel = gtk.Label(text)
   #On crée un bouton
       tabButton=gtk.Button()
   #On lui affecte la méthode remove_book
       tabButton.connect('clicked',self.remove_book, notebook, frame)

       #On ajoute l'image au bouton en utilisant la méthode add_icon_to_button
       self.add_icon_to_button(tabButton)

       eventBox.show()
       tabButton.show()
       tabLabel.show()
   #On attache label et bouton à la boite
       tabBox.pack_start(tabLabel, False)
       tabBox.pack_start(tabButton, False)

       tabBox.show_all()
   #On ajoute la boite à l'eventbox
       eventBox.add(tabBox)
       return eventBox


   def remove_book(self, button, notebook, frame):
   "Fonction de suppression de page"
   #On récupère la page courante
       page = notebook.get_current_page()
   #On la supprime
       notebook.remove(frame)
       # On actualise le widget
       notebook.queue_draw_area(0,0,-1,-1)

   def delete(self, widget, event=None):
       gtk.main_quit()
       return False

   def __init__(self):
       window = gtk.Window(gtk.WINDOW_TOPLEVEL)
       window.connect("delete_event", self.delete)
       window.set_border_width(10)

       #On crée un nouveau notebook
       notebook = gtk.Notebook()
       window.add(notebook)
       notebook.show()

       # On ajoute quelques pages
       for i in range(5):
           page_number = i + 1
           frame = gtk.Frame("Frame %d" % page_number)
           frame.set_border_width(10)
           frame.set_size_request(100, 75)
           frame.show()
           label = gtk.Label("Dans la Frame %d" % page_number)
           frame.add(label)
           label.show()

           eventBox = self.create_custom_tab("Tab %d" % page_number,
notebook, frame)
           notebook.append_page(frame, eventBox)
       # Page que nous verrons à l'ouverture (page 4)
       notebook.set_current_page(3)
       window.show()

def main():
   gtk.main()
   return 0

if __name__ == "__main__":
   NotebookExample()
   main()
_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to